节点创建
创建
判断空
求长度
遍历
头插法
尾插法
任意位置插入
删除
搜索
class Node:
def __init__(self,item):
self.item=item
self.prev=None
self.next=None
class DLinkList:
def __init__(self):
self.head=None
def is_empty(self):
return self.head==None
def lenth(self):
cur=self.head
count=0
while cur!=None:
count+=1
cur=cur.next
return count
def travel(self):
cur=self.head
while cur!=None:
print(cur.item,end='\t')
cur=cur.next
print("")
def add(self,item):
node = Node(item)
if self.is_empty():
self.head=node
node.prev=self.head
else:
node.next=self.head
self.head.prev=node
self.head=node
def append(self,item):
node = Node(item)
if self.is_empty():
self.head=node
return
cur=self.head
while cur.next!=None:
cur=cur.next
cur.next=node
node.prev=cur
def search(self,item):
if self.is_empty():
return False
else:
cur=self.head
while cur!=None:
if cur.item==item:
return True
cur=cur.next
return False
d_link_list = DLinkList()
for i in [5,4,3,2,1]:
d_link_list.append(i)
d_link_list.travel()
print(d_link_list.search(21))
创建节点的时候比普通的单链表多一个prev指针
初始化链表的时候和普通的单链表是一样的
判断空和普通的单链表是一样的
遍历的时候和普通链表是一样的
头插法在插入非首节点的时候, head指针的prev指向node节点
尾插法的时候新建的节点的prev指向cur节点
搜索是一样的
在任意位置插入的时候,cur指针 新建节点指针 指向关系 先改变新建节点的pre和next的指向关系,然后改变关于cur的prev和next的关系
删除 改变当前cur的prev和next指向关系