【问题标题】:Python loop a linked list, why is the original head not changed?Python循环一个链表,为什么原来的头没有变?
【发布时间】:2016-12-13 00:23:58
【问题描述】:

我正在尝试理解 Python 的传递参数的方式。我知道 Python 不同于 C++ 和其他语言。它是通过对象引用传递的。

我尝试使用这些代码:

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

node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node4 = ListNode(4)
node5 = ListNode(5)

node1.next = node2
node2.next = node3
node3.next = node4
node4.next = node5


def testWithPointers1(head):
    head.next = None   

如果我做 testWithPointers1(node1)

那么 node1.next 将是 None

def testWithPointers2(head):
    cur = head
    cur.next = None

如果我做 testWithPointers1(node1)

那么 node1.next 将是 None

def printLinkedList(head):
    while head:
        print(head.val)
        head = head.next

但是为什么这段代码,在调用 printLinkedList(node1) 之后,不会改变 node1 的值呢?

【问题讨论】:

  • 你没有将node1的下一个值赋给最后一位的任何东西?

标签: python loops linked-list


【解决方案1】:

它不会更改 node1 值,因为您所做的只是更改节点的本地副本。在每个例程中,head是一个局部变量,指向你传入的节点。它不是node1的别名;它只是对节点的另一个引用。

当您更改节点的字段时,您指向的是节点所在的实际内存位置,因此当您通过 node1 引用相同的位置时,您会看到这些更改。但是,更改 head 的值不会更改 node1 引用。

【讨论】:

  • 虽然还是有些疑惑,但是谢谢。还需要一些时间来消化它。
猜你喜欢
  • 2014-04-29
  • 1970-01-01
  • 2012-11-29
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 2016-09-13
相关资源
最近更新 更多