Leecode刷题:024反转单项链表

发布时间:2024年01月04日

题目:

是否没看题解:有思路但是没做出来

最初的解答思路:

定义一个pre指向头结点,cur为pre.next,定义last为cur.next,将cur.next指向pre定位到cur位置,然后cur定位至last节点。

最开始的代码:

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre =head;
        ListNode cur =head.next;
        ListNode last =cur.next;
        if(head==null){return null;}
        while(cur!=null){
            cur.next=pre;
            pre=cur;
            cur=last;
            last=last.next;
        }
        return head;
    }

出现的报错代码:Found cycle in the ListNode,链表成环

排查问题:1.因为while循环中第一行的cur.next的位置已经指向了pre节点,所以到第四行的时候想将cur节点往后移动会跑到pre节点形成死循环,因此需要在while循环之中提前存储cur下一个节点的位置,再进行移动

2.返回值最开始返回的head,这里没有思考直接返回的head,结果报错,后面通过观察别人的解题思路,得知等cur为空时,pre停留在最后一位所以得返回pre的话反转后第一个则是从pre开始

正确代码:

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre =null;;
        ListNode cur =head;
       
        if(head==null){return null;}
        while(cur!=null){
            ListNode next = cur.next;
            cur.next=pre;
            pre=cur;
           cur=next;
        }
       
        return pre;
    }
}

文章来源:https://blog.csdn.net/weixin_46139028/article/details/135371766
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。