#定义双链表结点
class Node():
def __init__(self,elem):
self.elem=elem
self.fore=None
self.next=None
#定义双链表操作
class Double_Link():
def __init__(self):
self.nextlast=None
#尾插
def append(self,elem):
Elem=Node(elem)
if not self.is_empty():
current=self.nextlast
while current.next:
current=current.next
current.next=Elem
else:
self.nextlast=Elem
#头插
def add(self,elem):
Elem=Node(elem)
if not self.is_empty():
Elem.next=self.nextlast
self.nextlast.fore=Elem
self.nextlast=Elem
else:
self.nextlast=Elem
#任意插
def insert(self,num,elem):
if num<0 or num>self.get_length():
raise IndexError("输入索引不在取值范围内")
if not self.is_empty():
if num==0:
self.add(elem)
if num==self.get_length():
self.append(elem)
else:
Elem = Node(elem)
goal=0
current=self.nextlast
while goal<(num-1):
goal += 1
current=current.next
Elem.next=current.next
current.next.fore=Elem
current.next=Elem
Elem.fore=current
#输出链表
def print_link(self):
list=[]
current=self.nextlast
while current:
list.append(current.elem)
current=current.next
print(list)
#链表长度
def get_length(self):
length=0
if self.nextlast:
current=self.nextlast
while current:
length+=1
current=current.next
return length
#是否为空
def is_empty(self):
return not self.nextlast
#查找元素
def find(self,elem):
current=self.nextlast
if not self.is_empty():
while current:
if current.elem==elem:
print("找到元素%s"%elem)
else:
current=current.next
else:
print("双链表中没有元素")
#删除元素
def remove(self,elem):
if self.is_empty():
return
else:
#需要考虑被删元素是不是第一个结点
current=self.nextlast
if elem==current.elem:
#需要判断这个链表中是不是只有一个元素
if current.next==None:
self.nextlast=None
else:
last=current.next
last.fore=None
self.nextlast=last
return
#被删元素不是第一个结点,需要遍历链表
while current!=None:
if current.elem==elem:
current.fore.next=current.next
current.next.fore=current.fore
break
current=current.next
ll=Double_Link()
ll.append(1)
ll.append(2)
ll.append(3)
ll.remove(1)
ll.remove(2)
ll.print_link()