# @ Time : 2020/11/2 11:52
# @ Author : Ellen
'''
.is_empty()链表是否 为空
.length() 链表长度
.travel() 遍历整个链表
.append(item) 链表尾部添加元素
.add(item) 链表头部添加元素
.insert(pos, item) 指定位置添加元素
.search(item) 查找节点是否存在
.remove(item) 删除节点
'''
class Node(object):
"""双向链表的节点"""
def __init__(self, item):
# item存放数据
self.item = item
# next是下一个节点的标识
self.next = None
# prev是上一个节点的标识
self.prev = None
class DoubleLinkList(object):
"""双向链表"""
def __init__(self, node=None):
self.__head = node
# 判断链表是否为空
def is_empty(self):
if self.__head == None:
return True
else:
return False
# 链表长度
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
# 双向链表头部添加元素
def add(self, item):
node = Node(item)
if self.is_empty():
# 空链表
self.__head = node
else:
# 将node的next指向__head
node.next = self.__head
# 将__head指向的头结点的prev指向node
self.__head.prev = node
# 将__head指向node
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指向最后一个节点
cur.next = node
node.prev = cur
def insert(self, pos, item):
"""指定位置添加元素"""
if pos <= 0:
self.add(item)
elif pos > (self.length()-1):
self.append(item)
else:
node = Node(item)
cur = self.__head
count = 0
while count < (pos-1):
count += 1
cur = cur.next
node.prev = cur
node.next = cur.next
cur.next.prev = node
cur.next = node
if __name__ == '__main__':
dll = DoubleLinkList()
dll.add(20)
dll.add(30)
dll.insert(1, 66)
dll.insert(2, 77)
dll.travel()
执行结果:
30 66 77 20