本文主要是介绍Leecode刷题:024反转单项链表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:
是否没看题解:有思路但是没做出来
最初的解答思路:
定义一个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;}
}
这篇关于Leecode刷题:024反转单项链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!