p
y
t
h
o
n
实
现
双
向
链
表
python实现双向链表
python实现双向链表
练习三部曲之一
class Node(object):
def __init__(self, elem):
self.elem = elem
self.pre = None
self.next = None
class DoubleLinkedList(object):
def __init__(self, node=None):
self.__head = node
def length(self):
cur = self.__head
count = 0
while cur is not None:
count += 1
cur = cur.next
return count
def is_empty(self):
return self.__head is None
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
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
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
练习三部曲之二
class Node(object):
def __init__(self, elem):
class DoubleLinkedList(object):
def __init__(self, node=None):
def length(self):
def is_empty(self):
def addFirst(self, elem):
def addLast(self, elem):
def add(self, pos, elem):
def remove(self, elem):
def travel(self):
def search(self, elem):
练习三部曲之三
class DoubleLinkedList(object):