【发布时间】:2022-01-19 01:44:31
【问题描述】:
以下是我的代码:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def __str__(self):
return str(self.val) + " -> " + str(self.next)
def reverse_list(head: ListNode) -> ListNode:
prev, curr = None, head
while curr:
nxt = curr.next
curr.next = prev
prev = curr
curr = nxt
return prev
linked_list = ListNode(1, ListNode(2, ListNode(3)))
打印出来时,linked_list 显示为“1 -> 2 -> 3 -> None”。但是,在调用了reverse_list函数一次,然后再次打印linked_list之后,它似乎发生了变异,变成了1 -> None。谁能解释这背后的原因?示例如下:
print(linked_list)
# 1 -> 2 -> 3 -> None
print(reverse_list(linked_list))
# 3 -> 2 -> 1 -> None
print(linked_list)
# 1 -> None
【问题讨论】:
-
因为您正在修改列表节点。所以最初的节点现在是最后一个。
-
linked_list仍然包含对最初第一个但现在是最后一个节点的引用。 -
@Barmar 你能解释一下我的函数是如何改变全局变量的吗?有没有办法在不改变全局变量的情况下反转列表?谢谢
-
它没有改变全局变量。
-
它改变了全局变量引用的对象。
标签: python oop linked-list mutation