[英]Confused about nodes
def absorb_value(lnk, value):
""" (LinkedList, int) -> NoneType
>>> lnk = LinkedList()
>>> lnk.append(6)
>>> lnk.append(7)
>>> lnk.append(8)
>>> lnk.append(7)
>>> print(lnk.front)
6 -> 7 -> 8 -> 7 ->|
>>> absorb_value(lnk, 7)
>>> print(lnk.front)
6 -> 15 -> 7 ->|
>>> absorb_value(lnk, 6)
>>> print(lnk.front)
21 -> 7 ->|
"""
if lnk.front:
prev_node, cur_node = None, lnk.front
while cur_node and not cur_node.value == value:
prev_node = cur_node
cur_node = cur_node.next_
if cur_node and cur_node.next_:
cur_node.next_.value += value
if prev_node:
prev_node.next_ = cur_node.next_
else:
lnk.front = cur_node.next_
lnk.size -= 1
else:
pass
else:
pass
我得到了一個解決方案,我理解大部分代碼,但不知道它是如何改變原始鏈接的。
prev_node.next_ = cur_node.next_
這里我不明白這段代碼是如何工作的,沒有關於lnk
代碼,但是為什么lnk
可以被它改變?
您在問題末尾引用的cur_node
從鏈表中cur_node
。 它不需要直接修改lnk
,因為會有一連串其他鏈接從lnk
通向prev_node
,因此對列表的更改將是可見的。
我注意到整個prev_node
業務對我來說似乎沒有必要。 這將是更容易修改cur_node.value
和刪除cur_node.next_
從列表中,而不是刪除cur_node
修改后cur_node.next_.value
。 (也許有一些我沒有想到的極端情況?最后的pass
語句是否應該被一些額外的代碼替換?)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.