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

链表去重:两段Python代码为何一段有效一段无效?

链表去重代码的疑问解析

第一段代码为何能正常运行?

class LinkedList:
    def __init__(self, value):
        self.value = value
        self.next = None


def removeDuplicatesFromLinkedList(linkedList):
    cur = linkedList
    while cur.next is not None:
        if cur.value == cur.next.value:
            cur.next = cur.next.next
        else:
            cur = cur.next

    return linkedList

这段代码里,cur只是指向原链表头节点的引用变量,遍历过程中我们修改的是cur.next——也就是节点对象的next属性,这直接改动了原链表的结构。而函数参数linkedList自始至终都指向原链表的头节点,所以最后返回它,得到的就是已经完成去重的完整链表。

简单说:我们没动linkedList指向的头节点,只是通过cur遍历修改了链表内部的指针关系,原链表的头节点位置没变,返回它自然能拿到整个修改后的链表。

第二段代码为何失效?

class LinkedList:
    def __init__(self, value):
        self.value = value
        self.next = None


def removeDuplicatesFromLinkedList(linkedList):
    
    while linkedList.next is not None:
        if linkedList.value == linkedList.next.value:
            linkedList.next = linkedList.next.next
        else:
            linkedList = linkedList.next

    return linkedList

这段代码的问题在于,直接把参数linkedList当成了遍历指针。遍历过程中,当遇到不同值的节点时,linkedList = linkedList.next会让这个变量指向链表的下一个节点,最后遍历结束时,linkedList已经指向了链表的末尾节点(而非原头节点)。此时返回它,只能得到链表的最后一部分,而非完整的去重链表。

比如原链表是1->1->2->2->3,遍历结束后linkedList会指向3,返回的就只有3,前面的节点都丢失了,自然无法实现预期的去重效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:16:08