Python中修改ListNode变量为何未改变链表结构?
Python链表变量赋值为何不改变链表结构?
先看我们定义的链表节点类:
class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next
创建链表1 -> 2 -> 3 -> None的代码:
a = ListNode(1) b = ListNode(2) c = ListNode(3) a.next = b b.next = c
执行c = c.next后,链表结构并没有变成1 -> 2 -> None,原因很明确:
- Python里的变量是指向对象的引用,而非对象本身。变量
c最初指向值为3的ListNode对象,同时b.next也指向这个对象。 - 执行
c = c.next时,只是把变量c的指向改成了c.next(也就是None),但完全没有修改原来那个值为3的节点对象,也没改变b.next的指向。b.next依然指向值为3的节点,所以链表结构自然保持不变。
如果要修改链表结构让它变成1 -> 2 -> None,你需要直接修改b.next的指向,比如执行:
b.next = None
这时候b的next不再指向值为3的节点,链表结构就会发生预期的变化。
内容的提问来源于stack exchange,提问作者Wonjoo Lee
相关产品推荐
相关产品推荐

