Python 排序双链表

Python 排序双链表,python,linked-list,Python,Linked List,我在理解和实现双链接列表方面遇到困难。我能掌握链表的大部分概念。以下是我迄今为止的代码(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, an

我在理解和实现双链接列表方面遇到困难。我能掌握链表的大部分概念。以下是我迄今为止的代码(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
因为在调用DoublyNode(元素,cur_节点,prev_节点)之前有一行
prev_node=cur_node
,所以最后会将上一个元素和下一个元素都设置到上一个元素,这样就得到了一个链接列表,其中只有两个到上一个元素的链接。因此,您最好只传递
None
作为
next
参数1,然后在循环的下一次传递时手动初始化它。这样做的好处是在列表的最后一个元素中将其保留为
None


1使用名称
next
作为构造函数中的参数将隐藏内置函数
next
,该函数推进迭代器。您可以使用名称
next\uu
,这是一种规范的做法。使用
next
作为属性不是问题,因为这样可以限定名称,从而不会出现阴影。但是,它会在一些语法高亮中出错。

我认为最好先用一个元素设置链表,然后使用插入算法找到插入其他元素的正确位置。如果你想保持简单,首先。