最近在leetcode做206这个反转链表的时候,发现最终输出newH.next的时候有点问题,特此记录一下。
先看题目:
206.反转链表
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例2:
输入:head = [1,2]
输出:[2,1]
我的正常答案:(双指针法)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null, cur = head;
ListNode tmp;
while(cur != null){
tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
return pre;
}
}
但是,有意思的事情发生了,当我尝试的返回pre.next
,它却返回的是null?
按我的个人理解,这当然是一个错误答案,但正确的返回应该是排除最后一个节点以外的剩余节点的倒序,也不应该是null啊。
比如:return pre
就应该是5->4->3->2->1->null
的话,return pre.next
就应该是4->3->2->1->null
。
个人觉得很有意思,回去后和室友讨论了一下,觉得确实有点问题,把问题跟leetcode
反馈了一下,目前还没有回复。
事情更新一下,初步的怀疑是因为leetcode的检查机制是重新一路next返回整个链表,而我返回的pre.next
最终会在头结点处返回空值null
,这样就能解释了。
附上代码随想录的反转链表过程示意图(画的太漂亮了):