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

链表代码疑问:类实例作为函数参数传递及None比较逻辑解析

Python链表代码示例
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
def printLL(head):
    while head is not None:
        print(head.data,end=" ")
        head = head.next

node1 = Node(10)
node2 = Node(20)
node3 = Node(30)
node4 = Node(40)
node1.next = node2
node2.next = node3
node3.next = node4
printLL(node2)

技术疑问

  • 调用printLL(node2)时,head被赋值为node2这个类实例,该过程具体是如何工作的?
  • 在while head is not None:语句中,我们究竟是在将什么与None进行比较?

问题解答

1. 函数参数传递的具体过程

Python采用对象引用传递的方式处理函数参数。当调用printLL(node2)时,node2是已经创建好的Node类实例,它在内存中占有一块存储空间。此时会把node2指向该内存对象的引用,传递给函数printLL的形参head。

简单来说,head和node2这两个变量此时指向内存中同一个Node实例(即存储数据20的节点)。需要注意的是,函数内部的head是局部变量,后续修改head的指向(比如执行head = head.next)只会改变head自身的指向,不会影响外部的node2变量。

2. while循环的比较逻辑

这里比较的是当前head变量所指向的对象引用是否为None。

在链表结构中,每个Node实例的next属性默认被初始化为None,用来标记链表的末尾。遍历过程中,每次循环会把head更新为当前节点的next(即下一个节点的引用)。当遍历到最后一个有效节点(比如示例中的node4)时,它的next属性是None,下一次循环head就会被赋值为None,此时head is not None的条件不成立,循环终止。

本质上是判断当前是否还有有效的链表节点可以访问,避免因访问不存在的节点而引发错误。

内容的提问来源于stack exchange,提问作者yt 4months

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:55:19