题解 | #反转链表#

反转链表

http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function ReverseList(pHead)
{
    //分为已反转和待反转两个表,pre式已反转链表第一个节点,cur是待反转链表第一个节点,next用来保存cur.next,以免cur.next指向改变后找不到原来的next
    //时间复杂度O(n)
    //考虑链表为空的情况
    if(!pHead){
        return null
    }
    //初始化
    let pre = null;
    let next = pHead.next;
    let cur = pHead;
    while(cur){
        //起到保存变量的作用,以防访问不到cur.next
        next = cur.next;
        //此前pre还是已反转链表的第一个节点,此操作后变成已反转链表的第二个节点
        cur.next = pre;
        //待反转第一个指针指向已反转第一个指针
        pre = cur;
        //待反转指针移动
        cur = next;
    }
    return pre
}
module.exports = {
    ReverseList : ReverseList
};
全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
06-06 21:28
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务