节点创建
创建
判断空
求长度
遍历
头插法
尾插法
任意位置插入
删除
搜索

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指向关系