Leetcod中ListNode的Python逻辑

2024-10-01 09:20:46 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是LeetCodeListNote类的定义:

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

对于代码:

^{pr2}$

注释中的值来自我的猜测。我听不懂这个步骤

result_tail = result_tail.next

result_tail = result是通过引用传递的,所以当result_tail变成{},result也应该变成{}。为什么result仍然保留{}?为什么{cd6>

result_tail = result_tail.next

有点像

result_tail = result.next.next    

谁能告诉我这里的逻辑吗?在


Tags: 代码selfnone定义objectinitdefval
1条回答
网友
1楼 · 发布于 2024-10-01 09:20:46

简单的回答是,Python是一种传递对象引用语言,而不是问题中暗示的通过引用传递。这意味着:

  1. result和{}是碰巧指向同一值的两个变量
  2. 底层值(result_tail.next = ListNode(1))的突变/变化将影响result所显示的值
  3. 但是,将变量result_tail分配/指向另一个值不会影响result的值
  4. result_tail = result_tail.next正在分配当前由变量分配的节点的下一个节点

下面是分配给变量(r=resultrt=result_tail)的值的可视化:

result = ListNode(0)
#r
#0 -> None

result_tail = result
#r
#0 -> None
#rt

result_tail.next = ListNode(1)
#r
#0 -> 1 -> None
#rt

result_tail = result_tail.next
#r
#0 -> 1 -> None
#     rt

result_tail.next = ListNode(2)
#r
#0 -> 1 -> 2 -> None
#     rt

result_tail = result_tail.next
#r
#0 -> 1 -> 2 -> None
#          rt

附加阅读参考:

相关问题 更多 >