题目:
是否没看题解:有思路但是没做出来
最初的解答思路:
定义一个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;
}
}