题解 | #反转链表#

反转链表

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

/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function ReverseList(pHead) {
    // write code here
    // 链表只有头节点或为空的情况
    if(pHead === null|| pHead.next === null) return pHead;
    // 定义两个空节点,temp用于存放根节点的下一个节点,而pre用于存放上一个节点
    let temp = null, pre = null
    while(pHead) {
        temp = pHead.next;
        pHead.next = pre;
        pre = pHead;
        pHead = temp;
    }
    return pre;
}
module.exports = {
    ReverseList: ReverseList,
};

解题思路

该题最简单的解法是采用双指针的解法,首先考虑清楚,反转之后的链表其实就是将指针的指示方向进行逆向。

以头节点pHead为例,反转之后它指向一个null节点,而它原来的下一个节点指向它。但是我们需要注意,在进行pHead->next = pre,之前,需要对之前的pHead->next节点利用临时空节点temp进行保存,防止丢失。我最初考虑在进行pHead.next= pre,之后让temp.next = pHead,但这么做是没有必要的,我们只需要让pre始终记录当前需要反转的节点的前一个节点,而temp始终记录该节点下一个节点即可(即 pre = pHead pHead = temp)。

全部评论

相关推荐

当初高考报计算机真是造大孽了啊!卷的飞起!哪都是计算机的人,考研,考公,找工作全他奶的计算机的人,太难了。国企也是。关键一届比一届卷,造大孽了!
_Lyrics_:因为计算机,没有体验到快乐的大学研究生时光,好不容易修完课程就要出去实习,看着别人专业可以一起搓麻将,游山玩水,而我却要自己一个人住在北上不到十平米的出租屋,每天两点一线
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务