簡體   English   中英

對節點感到困惑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM