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

链表追加节点:current与current.next的写法差异及原因探究

链表add方法两种写法的差异解析

背景代码

Node类定义

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

add方法第一部分

def add(self, newData):
    
    if self.head is None:
        self.head = Node(newData)
        return
  
    current = self.head

问题

为什么以下有效写法能正确给链表追加节点?

while current.next:
        current = current.next
    
    current.next =  Node(newData)

而以下无效写法无法完成追加?

while current:
        current = current.next
            
    current = Node(newData)

两者的判断条件current.next和current看起来类似,为什么结果完全不同?


核心原因:操作对象的本质不同

有效写法的逻辑

这个写法的核心是找到链表的最后一个节点,然后修改它的next属性:

  • 循环条件current.next会在当前节点的下一个节点为空时停止,此时current指向的是链表的最后一个有效节点(它的next是None)
  • 给current.next赋值新的Node实例,相当于直接把新节点挂载到了原链表的末尾,链表的结构被正确更新

无效写法的问题

这个写法的问题在于最后操作的是一个和原链表无关的局部变量:

  • 循环条件current会一直执行,直到current本身变成None(也就是遍历完最后一个节点的next之后)
  • 此时给current赋值新节点,只是改变了局部变量current的指向,原链表的最后一个节点的next依然是None,新节点根本没被关联到链表上

简单总结:

  • 第一种写法是在修改链表节点的属性,让链表的结构延伸
  • 第二种写法是在给一个已经脱离链表的局部变量重新赋值,完全没影响原链表的结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:22:14