You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

关键步骤解释

  1. 初始化指针:pre设为None,因为反转后的原头节点(新链表的尾节点)需要指向None。
  2. 保存后续节点:每次循环先把curr.next存到post,避免修改curr.next后找不到后续链表。
  3. 反转指针指向:curr.next = pre是整个反转的核心,让当前节点回头指向它的前一个节点。
  4. 移动指针:把pre挪到当前curr的位置,curr挪到之前保存的post位置,继续处理下一个节点。
  5. 返回新头:当curr变成None时,pre已经走到了原链表的最后一个节点,也就是反转后的新头节点。

这个实现还自动处理了空链表、单节点链表的边界情况,不需要额外的判断~

内容的提问来源于stack exchange,提问作者CathyQian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:47:23