p y t h o n 实 现 双 向 链 表 python实现双向链表 python实现双向链表
练习三部曲之一
# 1.节点构造
class Node(object):
def __init__(self, elem):
self.elem = elem
self.pre = None
self.next = None
class DoubleLinkedList(object):
# 2.成员构造
def __init__(self, node=None):
self.__head = node
# 3.返回大小
def length(self):
cur = self.__head
count = 0
while cur is not None:
count += 1
cur = cur.next
return count
# 4.判空
def is_empty(self):
return self.__head is None
# 5.增
def addFirst(self, elem):
node = Node(elem)
if self.is_empty(): # 链表为空
self.__head = node
else:
node.next = self.__head
node.next.pre = node
self.__head = node
def addLast(self, elem):
node = Node(elem)
if self.is_empty():
self.__head = node
else:
cur = self.__head
while cur.next is not None:
cur = cur.next
cur.next = node
node.pre = cur
def add(self, pos, elem):
if pos == 0:
self.addFirst(elem)
elif pos > self.length() or pos < 0:
raise ValueError('Add failed. Illegal index.')
else:
node = Node(elem)
cur = self.__head
pre = None
for i in range(pos):
pre = cur
cur = cur.next
pre.next = node
node.pre = pre
node.next = cur
if cur:
cur.pre = node
# 6.删
def remove(self, elem):
if self.is_empty():
return
cur = self.__head
while cur is not None:
if cur.elem == elem:
if cur == self.__head: # 若是头结点
self.__head = cur.next # 链表中只有一个结点
if cur.next:
cur.next.pre = None
else:
cur.pre.next = cur.next
if cur.next: # 如果不是尾结点
cur.next.pre = cur.pre
break
else:
cur = cur.next
# 7.查
def travel(self):
cur = self.__head
while cur is not None:
print(cur.elem, end=' ')
cur = cur.next
def search(self, elem):
cur = self.__head
while cur is not None:
if cur.elem == elem:
return True
else:
cur = cur.next
return False
练习三部曲之二
# 1.节点构造
class Node(object):
def __init__(self, elem):
class DoubleLinkedList(object):
# 2.成员构造
def __init__(self, node=None):
# 3.返回大小
def length(self):
# 4.判空
def is_empty(self):
# 5.增
def addFirst(self, elem):
def addLast(self, elem):
def add(self, pos, elem):
# 6.删
def remove(self, elem):
# 7.查
def travel(self):
def search(self, elem):
练习三部曲之三
# 1.节点构造
class DoubleLinkedList(object):
# 2.成员构造
# 3.返回大小
# 4.判空
# 5.增
# 6.删
# 7.查