首页 > 解决方案 > 如何实现对这个链表的排序?

问题描述

所以我需要将数据从最低到最高排序。所以最低值的指针将指向下一个最高值,依此类推。到目前为止,它只指向下一个插入的数据,而不管数据如何。

我需要在附加每个值时对其进行排序

代码:

    def AppendNode(self, node):
    if self._isleagl(node):                         #just a error checking method
        if self.list_start == None:                 #checks if list is empty
            self.list_start = node      
            node._set_pointer(None) 
        else:                                       #list not empty
            item = self.list_start
            while item:
                if item == node:                    #Checks for duplicates
                    print("This is not allowed")
                elif item._get_pointer() is None:   #If it is end of the List
                    item._set_pointer(node)
                    node._set_pointer(None)
                    break
                else:                              #incrimets to the next node via pointer
                    item = item._get_pointer()

电流输出:

 Index   Data   Pointer
   0      1       1
   1      6       2
   2      3       3
   3      7      None

期望的输出:

 Index   Data   Pointer
   0      1       2
   1      6       3
   2      3       1
   3      7      None

编辑:

所以我暗示了这一点,但是它仍然不起作用。我认为这与 elif 语句本身有关。

                elif item.data < node.data:
                    node._set_pointer(item._get_pointer())
                    item = item._get_pointer()
                    break
                elif item.data > node.data:
                    item._set_pointer(node)
                    item._get_pointer()
                    break

标签: pythonsortingooplinked-list

解决方案


如果要按排序顺序维护列表,则有时需要在中间插入节点,而不是总是将它们放在末尾:

# insert node after item
node.set_pointer(item.get_pointer())  # whatever followed item now follows node
item.set_pointer(node)                # node now follows item

推荐阅读