题解 | #反转链表01#

反转链表

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

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode ReverseList(ListNode head) {
         //利用辅助结点
        ListNode cur = head;
        ListNode next = null;//保存cur的下一个节点
        ListNode rehead = new ListNode(0);//新的头节点

        //判断原链表是否为空 或者只有一个节点
        //但由于head可能为空 所以会出现空指针异常
        if(cur != null){
            if(cur.next==null){
                  return head;
            }
        }

        //利用循环
        while (cur !=null){
            next = cur.next;//下一节点进行保存 
            //cur当前节点后所有节点更换成0节点后所有节点
            cur.next = rehead.next;
		   //把包含cur当前节点的链表转移到0节点后,永远让cur的最新节点为0节点后一位
            rehead.next =cur;
            //往后推移,cur当前节点更新到下一个节点
            cur = next;
        }

        //将rehead后的节点 挂到 head后面 实现head整个链表的反转
        head = rehead.next;

        return head;

    }
}

LC上面的解法 但感觉太麻烦了 也不好理解 原理就是双链表

双链表求解是把原链表的结点一个个摘掉,每次摘掉的链表都让他成为新的链表的头结点,然后更新新链表

cur是原链表 next临时链表 rehead是转移链表

要保持rehead的null节点一直在第一个 就比较费解

全部评论

相关推荐

永泽one:厉害厉害,感觉我找第一份实习的时候就见过兄弟,威少头像印象挺深刻的
点赞 评论 收藏
分享
2025-12-03 19:12
广东海洋大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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