twostorytown 2016-09-19 05:19 采纳率: 60%
浏览 1988
已结题

python实现链表重新排序问题

已经实现链表的数据结构和一些基本功能如求长度、插入新的数值等,现要对一个链表中的数字进行
排序,如(1,2,3,4,5)排序后成为(3,2,4,1,5),即以原来链表中第(length/2)个节点作为head,往后依次是原节点左1、右1、左2、右2...类推,求解如何不改变各个节点的地址实现排序。

  • 写回答

1条回答

  • 当作看不见 2016-09-19 06:26
    关注

    这个就是二叉树排序算法

    def binaryTreeSort(l):
        assert(type(l)==type(['']))
        length = len(l)
        if length==0 or length==1:
            return l
        class Node:
            def __init__(self,value=None,left=None,right=None):
                self.__value = value
                self.__left = left
                self.__right = right
            @property
            def value(self):
                return self.__value
            @property
            def left(self):
                return self.__left
            @property
            def right(self):
                return self.__right
    
        class BinaryTree:
            def __init__(self,root=None):
                self.__root = root
                self.__ret=[]
    
            @property
            def result(self):
                return self.__ret
            def add(self,parent,node):
                if parent.value>node.value:
                    if not parent.left:
                        parent.left = node
                    else:
                        self.add(parent.left,node)
                    pass
                else:
                    if not parent.right:
                        parent.right = node
                    else:
                        self.add(parent.right,node)
    
            def Add(self,node):
                if not self.__root:
                    self.__root = node
                else:
                    self.add(self.__root, node)
    
            def show(self,node):
                if not node:
                    return
                if node.right:
                    self.show(node.right)
                self.__ret.append(node.value)
                if node.left:
                    self.show(node.left)
    
            def Show(self):
                self.show(self.__root)
    
        b = BinaryTree()
        for i in l:
            b.Add(Node(i))
        b.Show()
    return b.result
    
    
    评论

报告相同问题?

悬赏问题

  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码