(Python)帮助解码这里发生的事情



这段代码不是我的,我只是想理解它

我需要一些帮助来理解这个lst2link函数中发生了什么。

因此,该函数首先在变量curdummy中创建两个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。

相关内容

最新更新