# 创建节点类
class Node():
def __init__(self, item):
self.item = item
# prev指向前一个节点的标识
self.prev =None
# next指向后一个节点的标识
self.next =None
# 双向链表
class DoubbleLinkList():
def __init__(self):
self.head =None
def is_empty(self):
"""判断链表是否为空"""
return self.headis None
def length(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=" ")
cur = cur.next
print()
def add(self, item):
"""在链表头部添加元素"""
node = Node(item)
if self.is_empty():
self.head = node
else:
node.next =self.head
self.head = node
def append(self, item):
"""在链表尾部添加元素"""
node = Node(item)
if self.is_empty():
self.head = node
else:
cur =self.head
while cur.next !=None:
cur = cur.next
cur.next = node
node.prev = cur
def insert(self, pos, item):
"""在链表指定位置上插入元素"""
node = Node(item)
if pos <=0:
self.add(item)
elif pos >self.length():
self.append(item)
else:
cur =self.head
count =0
while count < pos-1:
count +=1
cur = cur.next
node.next = cur.next
node.prev = cur
cur.next = node
def remove(self, item):
"""删除链表元素"""
if self.is_empty():
return
cur =self.head
if cur.item == item:
if cur.next !=None:
self.head = cur.next
cur.next.prev =None
else:
self.head =None
else:
while cur.next !=None:
if cur.item == item:
cur.prev.next = cur.next
cur.next.prev = cur.prev
return
cur = cur.next
if cur.item == item:
cur.prev.next =None
else:
return
def search(self, item):
"""查找链表元素"""
cur =self.head
while cur !=None:
if cur.item == item:
return True
cur = cur.next
return False
if __name__ =='__main__':
d = DoubbleLinkList()
print(d.remove(10))
print(d.search(10))
print(d.length())
d.add(20)
d.add(10)
d.append(30)
d.append(40)
d.insert(0, 50)
d.insert(5, 60)
d.remove(50)
d.remove(30)
d.remove(60)
print(d.search(60))
print(d.search(10))
print(d.search(40))
print(d.remove(60))
print(d.length())
d.travel()
运行结果:
