Python实现单向循环链表
作者:EasyWind
时间:2023-05-08
来源:互联网
浏览:0
单向循环链表将所有的链接在一起,每一个节点分为数据存储区和链接区,数据区存储数据,链接区链接下一个节点item:存储数据的地方next:链接下一个节点注意:单向循环链表是首位链接,即尾部的节点要和头部的节点链接单向链表操作1、链表是否为空2、链表的长度3、遍历链表4、链表头部添加元素5、链表尾部添加元素6、链表指定位置添加元素7、链表删除节点8、查找节点是否存在代码实现#Functions函数声明classNode():"""实例化节点类"""def__init__(self,item):self.ite
单向循环链表
将所有的链接在一起,每一个节点分为数据存储区和链接区,数据区存储数据,链接区链接下一个节点
item: 存储数据的地方
next: 链接下一个节点
注意: 单向循环链表是首位链接,即尾部的节点要和头部的节点链接
单向链表操作
1、链表是否为空
2、链表的长度
3、遍历链表
4、链表头部添加元素
5、链表尾部添加元素
6、链表指定位置添加元素
7、链表删除节点
8、查找节点是否存在
代码实现
# Functions 函数声明 class Node(): """实例化节点类""" def __init__(self, item): self.item = item self.next = None class Linklist(): """ 存放节点类 """ def __init__(self): self.head = None # 1. 链表是否为空 def is_empty(self): return self.head == None # 2. 链表的长度 def length(self): """ 返回链表的长度 遍历所有的节点,使用计数器计数 1、链表为空情况 """ # 实例化节点 cur = self.head if self.is_empty(): return 0 else: # 计数 count = 1 # 遍历链表 while cur.next != self.head: count+=1 cur = cur.next return count # 3. 遍历链表 def travel(self): """ 遍历链表,获取所有的数据 实例游标,遍历数据,输出数据 1、 空链表情况 2、 只有头部节点情况 3、 只有尾部节点情况 """ # 实例化游标 cur = self.head if self.is_empty(): return None else: # 遍历数据 while cur.next != self.head: print(cur.item, end=' ') cur = cur.next # 最后一个节点要单独输出 print(cur.item) # 4. 链表头部添加元素 def add(self, item): """ 往链表头部添加数据 分析 链表为空 self.head 直接指向node, 再讲node指向自己 链表不为空 node.next = self.head """ # 实例化游标 cur = self.head # 实例化节点 node = Node(item) # 判断是否为空 if self.is_empty(): self.head = node node.next = node else: # 不为空的情况 # 要将最后一个节点指向node while cur.next != self.head: cur = cur.next node.next = self.head self.head = node cur.next = node # 5. 链表尾部添加元素 def append(self, item): """ 往尾部添加数据 分析 实例化节点,再实例化游标先指向最后一个节点 调换指向 1、空链表情况 2、只有一个链表情况 """ # 实例化节点 node = Node(item) # 实例化游标 cur = self.head # 判断是否为空 if self.is_empty(): self.add(item) else: # 不为空的情况,移动游标指向最后一个节点 while cur.next != self.head: cur = cur.next node.next = self.head cur.next = node pass # 6. 链表指定位置添加元素 def insert(self, index, item): """ 指定位置添加数据 实例化节点, 实例化游标指向索引的数据,更改指向 位置大小 链表是否为空 """ # 实例化节点 node = Node(item) # 实例化游标 cur = self.head if index <=0: self.add(item) elif index > (self.length()-1): self.append(item) else: # 判断链表是否为空 if self.is_empty(): self.add(item) else: # 移动游标,指向指定的索引位置 count = 0 while count < index-1: count+=1 cur = cur.next node.next = cur.next cur.next = node pass # 7. 链表删除节点 def remove(self, item): """ 删除指定的节点 实例化游标,遍历链表插件这个节点是否存在,存在则更改指向 不存在,则不修改 空链表情况 头节点情况 尾结点情况 """ # 实例化游标 cur = self.head if self.is_empty(): return None else: # 不为空,遍历链表,对比数据是否相等 # 如果头节点是要删除的数据 if cur.item == item: self.head=cur.next # 找出最后的节点,将最后的节点指向,删除后面的那个节点 while cur.next != self.head: cur = cur.next cur.next = cur.next else: pro = None while cur.next != self.head: if cur.item == item: if cur.item == item: pro.next = cur.next return True else: pro = cur cur = cur.next if cur.item == item: pro.next = self.head pass # 8. 查找节点是否存在 def search(self, item): """ 查找该节点是否存在 实例化游标,遍历所有的节点 查看当前节点的数据是否和item 相等 空链表 头节点 尾结点 """ # 实例化游标 cur = self.head # 判断空链表 if self.is_empty(): return None else: # 不为空遍历整个链表 if cur.item == item: return True else: while cur.next != self.head: if cur.item == item: return True else: cur = cur.next if cur.item == item: return True pass
测试运行
# 程序的入口 if __name__ == "__main__": a = Linklist() a.add(400) a.add(300) a.add(200) a.add(100) # a.append(10) a.insert(4,6) # a.remove(6) print(a.length()) # 5 a.travel() # 100 200 300 400 6 print(a.search(100)) # True pass
作者最新文章
淘宝闪购“等灯不计时”机制解析:政策、技术与多方协同
2026-09-08 18:00
一加自研电竞三芯P4/G3/T3确认:一加16首发,支持185FPS及9000mAh电池
2026-09-08 16:52
抖音拍摄剪辑教程:从竖屏运镜到卡点成片
2026-09-03 06:05
Excel筛选大于指定数值:操作步骤与结果验证
2026-09-03 06:03
PDF添加文字水印:位置、透明度与字号设置指南
2026-09-03 06:01
上一篇:
Python函数的基础知识点
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多
Windows 10
Windows
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式
Windows/macOS/Linux
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















