簡體   English   中英

排序雙鏈表Python

[英]Sorted Doubly Linked List Python

我無法理解和實施雙向鏈接列表。 我可以掌握鏈表的大部分概念。 這是我到目前為止的代碼(在Python中)

*這是純粹的學術練習。 我通常會使用list和dict。

class DoublyNode(object):
    """A node of the SortedDoublyLL object.

    DoublyNode(item, next=None, previous=None) -> a new DoublyNode with data as
    its data, and next and previous as its neighbors."""

    def __init__(self, data, next = None, previous = None):
        """Make a new DoublyNode from item, pointing to next and previous."""

        self.data = data
        self.next = next
        self.previous = previous

class SortedDoublyLL(object):
    """A Sorted Doubly Linked List.

    SortedDoublyLL() -> new SortedDoublyLL list that is empty
    SortedDoublyLL(sequence) -> a SortedDoublyLL initialized from sequence's
    items.

    """

    def __init__(self, sequence = []):
        """Make a new SortedDoublyLL from the elements of sequence."""

        if len(sequence) == 0:
            self.head = None
            self.tail = None
        else:
            cur_node = None
            prev_node = None
            sequence.sort()
            sequence.reverse()
            for element in sequence:
                prev_node = cur_node
                cur_node = DoublyNode(element, cur_node, prev_node)

            self.head = cur_node
            self.tail = DoublyNode(sequence[0])

將你的循環改為

for element in sequence:
    prev_node = cur_node
    cur_node = DoublyNode(element, None, prev_node)
    prev_node.next = cur_node

因為行prev_node = cur_node在調用DoublyNode(element, cur_node, prev_node) ,所以最終將前一個元素和下一個元素都設置為前一個元素,因此您最終得到的鏈接列表只有兩個指向前一個元素的鏈接。 因此,您也可以將None作為next參數1傳遞,然后在下一次循環傳遞時手動初始化它。 這樣做的好處是在列表的最后一個元素上保留為None

1使用next一個名稱作為構造函數中的參數將影響nextin函數next推進迭代器。 您可以使用名稱next_這是規范的事情。 使用next作為屬性不是問題,因為它限定了名稱以便不會發生陰影。 雖然它會在一些語法熒光筆中搞砸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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