这段代码不是我的,我只是想理解它
我需要一些帮助来理解这个lst2link
函数中发生了什么。
因此,该函数首先在变量cur
和dummy
中创建两个ListNode
,然后使用原始cur
作为头来构建链表。返回dummy.next
。当我运行这个并查看返回的内容时,dummy.next
似乎是使用cur
创建的链表的头。似乎没有任何地方表明dummy.next
指向在该函数中创建的链表的头?它怎么知道指向那里?
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def lst2link(lst):
cur = dummy = ListNode(0)
for e in lst:
cur.next = ListNode(e)
cur = cur.next
return dummy.next
因此,函数开始时在变量cur和dummy 中创建两个ListNodes
这不是真的——它创建了一个ListNode
,但分配了两个变量来引用同一节点。
在构建列表时,cur
变量会在列表中下移,以便它始终指向最后一个节点。dummy
从未被重新分配,因此它继续指向原始(第一个(节点,该节点不被视为返回的最终列表的一部分。
假设我们用输入[1, 2]
调用这个函数,事件序列看起来像这样:
cur = dummy = ListNode(0)
# cur
# [0]
# dummy
cur.next = ListNode(1)
cur = cur.next
# cur
# [0] -> [1]
# dummy
cur.next = ListNode(2)
cur = cur.next
# cur
# [0] -> [1] -> [2]
# dummy
return dummy.next
# cur
# [0] -> [1] -> [2]
# dummy ^
# |
# return
list2link函数接受ListNode对象的列表。然后,它使用值为0的实例化ListNode声明两个变量"cur"one_answers"dummy"。
然后,函数对列表中接收到的ListNode对象进行迭代,将第一项添加为"cur"变量的"next"或子变量。
然后,它将cur变量设置为刚刚添加的子节点。它重复此操作,将上一个节点中的下一个项添加为其子项。从而形成一个树状结构,每个节点都有一个子节点。
尽管这段代码不允许访问父节点,所以即使它已经将其作为子节点添加,它也永远无法返回列表。
此外,返回值"dummy.next"仅在objects init方法中设置为None,因此它只会返回None。