Code:
class Node(object):
"""结点"""
def __init__(self, item):
self.elem = item
self.next = None
self.prev = None
class DoubleLinklist(object):
"""双链表"""
def __init__(self, node = None):
self.__head = node
def is_empty(self):
"""判断链表是否为空"""
return self.__head is 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.elem, end=" ")
cur = cur.next
print()
def add(self, elem):
"""在头部添加结点"""
node = Node(elem)
if self.is_empty():
self.__head = node
print("空表头部添加成功")
else:
node.next = self.__head
self.__head.prev = node
self.__head = node
print("头部" + str(elem) + "添加成功")
def append(self, elem):
"""在尾部添加结点"""
node = Node(elem)
if self.is_empty():
self.__head = node
print("空表尾部添加"+ str(elem) +"成功!")
else:
cur = self.__head
while cur.next != None:
cur = cur.next
cur.next = node
node.prev = cur
print("尾部添加"+ str(elem) +"成功!")
def insert(self, pos, elem):
node = Node(elem)
if pos <= 0:
self.add(elem)
elif pos > (self.length()-1):
self.append(elem)
else:
cur = self.__head
count = 0
while count < pos-1:
cur = cur.next
count += 1
cur.next.prev = node
node.next = cur.next
node.prev = cur
cur.next = node
print("添加成功!")
def remove(self, elem):
"""删除双链表第一个elem结点"""
if self.is_empty():
print("SingleLinklist is none!")
return False
cur = self.__head
pre = None
mark = False
while cur != None:
if cur.elem != elem:
pre = cur
cur = cur.next
else:
mark = True
if cur == self.__head:
self.__head = self.__head.next
self.__head.prev = None
cur = self.__head
else:
pre.next = cur.next
cur.next.prev = pre
cur = cur.next
print(mark)
def search(self, elem):
"""查找某一元素"""
if self.is_empty():
return False
cur = self.__head
count = 0
while cur != None:
if cur.elem == elem:
return count
cur = cur.next
count += 1
return False
if __name__ == "__main__":
li2 = DoubleLinklist()
li2.travel()
li2.append(7)
li2.append(8)
li2.append(9)
li2.travel()
li2.add(5)
li2.add(4)
li2.add(3)
li2.add(2)
li2.add(1)
li2.add(0)
li2.travel()
print("查找成功:" + str(li2.search(8)))
li2.insert(6, 6)
li2.travel()
li2.remove(7)
li2.travel()
print("OVER")
OUTPUT