python实现数据结构中双向循环链表操作的示例
#代码知识 发布时间: 2026-01-12
看此博客之前建议先看看B站的视频python数据结构与算法系列课程,该课程中未实现双向循环链表的操作,所以我按照该视频的链表思路实现了双向循环链表的操作,欢迎大家阅读与交流,如有侵权,请联系博主!

下面附上代码:
class Node:
def __init__(self, elem):
self.elem = elem
self.prev = None
self.next = None
class DoubleCycleLinkList:
def __init__(self, node=None):
self.__head = node
def is_empty(self):
"""判空"""
if self.__head is None:
return True
return False
def length(self):
"""链表长度"""
if self.is_empty():
return 0
cur = self.__head
count = 1
while cur.next is not self.__head:
count += 1
cur = cur.next
return count
def travel(self):
"""遍历链表"""
if self.is_empty():
return
cur = self.__head
while cur.next is not self.__head:
print(cur.elem, end=" ")
cur = cur.next
print(cur.elem, end=" ")
print("")
def add(self, elem):
"""头插法"""
node = Node(elem)
if self.is_empty():
self.__head = node
node.prev = node
node.next = node
else:
self.__head.prev.next = node
node.prev = self.__head.prev
node.next = self.__head
self.__head.prev = node
self.__head = node
def append(self, elem):
"""尾插法"""
node = Node(elem)
if self.is_empty():
self.__head = node
node.prev = node
node.next = node
else:
node.next = self.__head
node.prev = self.__head.prev
self.__head.prev.next = node
self.__head.prev = node
def insert(self, pos, elem):
"""任一位置(pos)插入, 下标从0数起"""
if pos <= 0:
self.add(elem)
elif pos > (self.length() - 1):
self.append(elem)
else:
count = 0
cur = self.__head
node = Node(elem)
while count < (pos - 1):
count += 1
cur = cur.next
node.next = cur.next
node.prev = cur
node.next.prev = node
cur.next = node
def remove(self, elem):
"""删除某一节点,若有多个符合条件的节点,删除第一个即可"""
if self.is_empty():
return
cur = self.__head
while cur.next is not self.__head:
if cur.elem == elem:
if cur is self.__head:
self.__head = cur.next
cur.prev.next = cur.next
cur.next.prev = cur.prev
else:
cur.prev.next = cur.next
cur.next.prev = cur.prev
break
cur = cur.next
if cur.elem == elem:
cur.prev.next = self.__head
self.head = cur.prev
def search(self, elem):
"""查找某一个节点"""
if self.is_empty():
return False
cur = self.__head
while cur.next is not self.__head:
if cur.elem == elem:
return True
cur = cur.next
# while中处理不到尾节点,所以进行最后尾节点的判断
if cur.elem == elem:
return True
return False 代码知识SEO
上一篇 : java 中类似js encodeURIComponent 函数的实现案例
下一篇 : pip已经安装好第三方库但pycharm中import时还是标红的解决方案
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!