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