在弄懂原理后我写出了这样的代码
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
ListNode temp = null;
while(cur!=null){
temp = cur;//如果一个节点的next指针进行了操作,那么就无法保存他的信息了
cur.next = pre;
pre = cur;
cur = temp.next;//这的temp已经发生了变化
}
return pre;
}
}
正确代码:
// 双指针
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode cur = head;
ListNode temp = null;
while (cur != null) {
temp = cur.next;// 保存下一个节点
cur.next = prev;
prev = cur;
cur = temp;
}
return prev;
}
}
经过对比,得到结论,一定不要把正在操作next的节点保存,因为存放的是地址,当你更改next的时候保存的值也会发生变化。