python实现双向链表
发布日期:2021-05-14 15:19:59 浏览次数:15 分类:精选文章

本文共 4517 字,大约阅读时间需要 15 分钟。

Python ������������������

������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Python ���������������������������������������

������������

���������������������������������������������

  • elem������������������������������������
  • pre������������������������������������
  • next������������������������������������
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

������������

������������������������

# ���������������
dq = DoubleLinkedList()
# ������������������
dq.addFirst(1)
dq.addFirst(2)
dq.addFirst(3)
# ������������������
print(dq.length()) # ���������3

������������������

# ������������
dq.travel() # ���������1 2 3

������������������

cur = dq.__head.next
while cur is not None:
print(cur.elem, end=' ')
cur = cur.next
print() # ���������2 3

������������������

  • ��������������������� dq.addLast(4) dq.travel() # ���������1 2 3 4
  • ��������������� dq.remove(2) dq.travel() # ���������1 3 4
  • ��������������� if dq.search(2): print("������������") else: print("���������������")
  • ��������������� if dq.is_empty(): print("������������") else: print("���������������")

������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

上一篇:python实现单向循环链表
下一篇:python实现单链表

发表评论

最新留言

不错!
[***.144.177.141]2025年04月11日 11时27分38秒