class Node:
def __init__(self,item):
self.elem = item
self.next = None
self.prev = None
class DoubleLinkList:
#初始化
def __init__(self,node=None):
if node != None:
self.__head = Node(node)
else:
self.__head = node
# 在单向链表头部追加
def add(self,item):
node = Node(item)
if self.is_empty():
self.__head = node
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
else:
curNode = self.__head
while curNode.next != None:
curNode = curNode.next
curNode.next = node
node.prev = curNode
# 在单向链表指定位置追加
def insert(self,pos,item):
if pos <= 0:
self.add(item)
elif pos > self.length()-1:
self.append(item)
else:
pre = Node(item)
curNode = self.__head
while pos>1:
curNode = curNode.next
pos = pos - 1
pre.next = curNode.next
curNode.next.prev = pre
curNode.next = pre
pre.prev = curNode
#删除节点
def remove(self,item):
curNode = self.__head
if curNode.elem == item:
self.__head = curNode.next
if curNode.next:
curNode.next.prev = None
else:
while curNode.elem != item:
curNode = curNode.next
pre = curNode.prev
pre.next = curNode.next
if curNode.next:
curNode.next.prev = pre
#查找链表是否存在item
def search(self,item):
curNode = self.__head
while curNode != None:
if curNode.elem == item:
return True
else:
curNode = curNode.next
return False
#判断链表是否为空
def is_empty(self):
return self.__head == None
#链表长度
def length(self):
count = 0
curNode = self.__head
while curNode != None:
count = count + 1
curNode = curNode.next
return count
#链表遍历
def travel(self):
curNode = self.__head
while curNode != None:
print(curNode.elem,end='\t')
curNode = curNode.next
print('\n')
if __name__ == '__main__':
doubleLinkList = DoubleLinkList()
doubleLinkList.add(11)
doubleLinkList.add(22)
doubleLinkList.append(33)
doubleLinkList.insert(1,44)
#doubleLinkList.remove(33)
doubleLinkList.travel()
双向单链表
最新推荐文章于 2022-08-03 00:06:34 发布