对 Python 中的链接列表进行排序

Sorting a Linked List in Python

我很难整理链表。我正在考虑剥离列表中的每个项目并将每个项目附加到新列表并按顺序添加。但我想在列表中对它们进行排序。我按逻辑想出来了,画出来了,但是好像不行哈哈。为了简单起见,我删除了很多我的代码,剩下的代码因为它们不需要。

class Node:

    def __init__(self, initdata, position = 0):

        self.data = initdata
        self.next = None
        self.position = position

    def getData(self):
        return self.data

    def getNext(self):
        return self.next

    def setData(self, newdata):
        self.data = newdata

    def setNext(self, newnext):

        self.next = newnext

    def __str__(self):
        return str(self.data)

class LinkedList:

    def __init__(self):

        self.head = None
        self.tail = None

    def sortList(self):

        previous = self.head
        current = previous.getNext() # Earth
        temp = current.getNext() #Venus
        stop = False
        while current != None: #None
            if current.getData() > temp.getData():
                previous.setNext(temp)
                temp.setNext(current)
                current.setNext(temp.getNext())
                previus = current
                current = temp
                temp = temp.getNext()
            else:
                previous = current
                current = temp
                temp = temp.getNext()

所以链表如下,头部为地球

[Earth] points to [Venus] points to [Mercury] points to None

我要

[Earth] points to [Mercury] points to [Venus] points to None

到目前为止,经过多次试验,我还没有得到这个结果:(有帮助吗?

交换节点时,交换相邻节点最终会旋转 3 个 next 指针,而交换非相邻节点会交换 2 对 next 指针。这两种情况都可以通过在要交换的节点之前交换节点的下一个指针,然后按顺序交换要交换的节点的下一个指针来处理。

代码还需要处理节点是列表的第一个节点(在这种情况下更新头指针)和节点是列表的最后一个节点(在这种情况下尾部指针)的情况指针已更新)。

你提到的第一种方法,从原始列表中删除节点,然后按顺序将它们插入到最初为空的列表中,应该更容易、更快捷。

最快的方法是使用头指针数组(大小为 26 到 32),这些头指针要么为 NULL,要么指向大小为 2^i(2 的 i 次方)的列表。该算法使用一个基本的合并列表函数来合并两个已经排序的列表。节点一次插入一个数组。然后合并数组,形成最终的排序数组。这是 C++ std::list:sort() 使用的方法(至少对于 HP / Microsoft STL)。