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

链表操作疑问:cur指向cur.next后修改为何仍影响head?

为什么else分支修改cur为cur.next后,修改cur仍会影响head?

当在else语句中将cur替换为cur.next后,修改cur时head为何会发生变化?

我知道执行cur=head时是创建引用,此时对head关联节点的修改会同步(因为cur和head的id相同),但进入else分支后,cur被改为cur.next,此时cur和head的id不再相同,可回到if分支后,对cur的修改仍会影响head,这是为什么?

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class Solution:
    def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
        cur=head
        while cur.val and cur.next:
            if cur.val==cur.next.val:
                cur.next=cur.next.next
            else:            
                cur=cur.next
            print(cur)  
        return head

核心原因是你修改的不是cur变量本身,而是cur指向的节点对象的属性:

  • 当cur = head时,cur和head指向同一个链表节点对象。
  • 进入else分支执行cur = cur.next后,cur确实指向了链表中的下一个节点,和head的指向不同了,但cur仍然是链表节点链中的一环,它的next属性关联着后续节点,而整个链表的根节点还是head。
  • 回到if分支时,你执行的是cur.next = cur.next.next——这是修改cur指向的那个节点的next属性,相当于在链表链上修改了节点之间的连接关系。这种修改会直接反映在整个链表结构中,而head作为链表的入口,自然能感知到整个链的变化。

举个实际场景:假设链表结构是 head -> 1 -> 1 -> 2,当cur移动到第一个1节点时,触发if分支修改cur.next跳过第二个1,链表就变成head ->1 ->2。此时cur虽然已经不是指向head本身,但修改的是链表节点的连接关系,head作为入口,整个链的结构已经改变,所以返回head时就能看到修改后的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:15:12