LeetCode单链表反转问题求助:代码仅返回原头节点
解决单链表反转代码仅返回原头节点的问题
Hey Cathy, 我看了你的单链表反转代码,问题出在反转逻辑的核心步骤上——你对pre的赋值和指针调整的顺序完全错啦,咱们一步步拆解来看。
先贴出你的代码片段方便分析:
class Solution(object): def reverseList(self, head): """ :type head: ListNode :rtype: ListNode """ if head == None: return head pre, curr, post = None, head, head.next while post: pre = curr.next pre,... # 从现有逻辑就能看出核心问题
问题根源
你当前写的pre = curr.next只是把pre指向了当前节点的下一个节点,完全没做反转指针指向的核心操作。单链表反转的本质是让每个节点的next指向它的前一个节点,而不是让pre去追着下一个节点跑。另外你的循环里也没有更新curr和post的位置,导致指针一直停在原地,最后自然只能返回原头节点。
修正后的代码
这是正确的迭代式反转实现,每一步都做了清晰的指针调整:
class Solution(object): def reverseList(self, head): """ :type head: ListNode :rtype: ListNode """ pre = None curr = head while curr: # 先保存下一个节点,不然反转后会丢失后续链表的引用 post = curr.next # 核心操作:把当前节点的next指向它的前一个节点,完成反转 curr.next = pre # 指针整体后移,准备处理下一个节点 pre = curr curr = post # 循环结束时,curr为None,pre就是反转后的新头节点 return pre
关键步骤解释
- 初始化指针:
pre设为None,因为反转后的原头节点(新链表的尾节点)需要指向None。 - 保存后续节点:每次循环先把
curr.next存到post,避免修改curr.next后找不到后续链表。 - 反转指针指向:
curr.next = pre是整个反转的核心,让当前节点回头指向它的前一个节点。 - 移动指针:把
pre挪到当前curr的位置,curr挪到之前保存的post位置,继续处理下一个节点。 - 返回新头:当
curr变成None时,pre已经走到了原链表的最后一个节点,也就是反转后的新头节点。
这个实现还自动处理了空链表、单节点链表的边界情况,不需要额外的判断~
内容的提问来源于stack exchange,提问作者CathyQian
相关产品推荐
相关产品推荐

