Doubly Linked List的整理(sort)出现无法引用node元素的问题。



class Node:
    def __init__(self,element,pre=None,nxt=None):
        self.element=element
        self.pre=pre
        self.nxt=nxt
class DLList:
    def __init__(self):
        self.header=Node2(None,None,None)
        self.trailor=Node2(None,None,None)
        self.header.nxt=self.trailor
        self.trailor.pre=self.header
        self.size=0
    def __len__(self):
        return self.size
    def is_empty(self):
        return self.size==0
    def insert_between(self,e,predecessor,succesor):
        newest=Node2(e,predecessor,succesor)
        predecessor.nxt=newest
        succesor.pre=newest
        self.size+=1
        return newest
    def delete_node(self,node):
        predecessor=node.pre
        succesor=node.nxt
        predecessor.nxt=succesor
        succesor.pre=predecessor
        self.size-=1
        element=node.element
        node.pre=node.nxt=node.element=None
        return element
    def iterate(self):
        current=self.header.nxt
        while current!= self.trailor.pre:
            print(current.element,end=' ')
            current=current.nxt
        print(current.element)


def insertSDLList(l):
    i=l.header.nxt.nxt
    while i!=l.trailor:
        iE=i.element
        print('i element: ',i.element)
        j=i.pre
        print('j element: ',j.element)

        while j!=l.header and j.element>iE: 
        # 问题:为什么 while j!=l.head and  j.element>i.element:  无法得到相同结果?

            j.nxt.element=j.element
            l.iterate()
            j=j.pre
            print(j.element)
        #print(j.element)

        j.nxt.element=iE 
        # 问题:为什么 j.nxt.element=i.element 无法得到相同结果

        l.iterate()
        i=i.nxt
    return l

#例子:
lst=[6,5,3,1,8,7,2,4]
l=DLList()
l.insert_between(4,l.header,l.trailor)
l.insert_between(2,l.header,l.header.nxt)
l.insert_between(7,l.header,l.header.nxt)
l.insert_between(8,l.header,l.header.nxt)
l.insert_between(1,l.header,l.header.nxt)
l.insert_between(3,l.header,l.header.nxt)
l.insert_between(5,l.header,l.header.nxt)
l.insert_between(6,l.header,l.header.nxt)
l.iterate()
print()
insertSDLList(l).iterate()

https://blog.csdn.net/kalinux/article/details/81950631