循环单链表 python_循环单链表报错
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
class Node(object):
"""节点类"""
def __init__(self, item):
self.item = item # 数据区
self.next = None # 链接区
self.pre = None
class CycleSingleLinkList(object):
"""单向循环链表"""
def __init__(self, node=None):
self.__head = node def is_empty(self):
""" 链表是否为空
:return 如果链表为空,返回真
"""
return self.__head is None def length(self):
"""链表长度"""
if self.is_empty():
return 0
# 将cur这个游标指向链表的头信息
cur = self.__head
count = 1
while cur.next != self.__head:
count += 1
cur = cur.next
return count def travel(self):
"""遍历整个链表"""
if self.is_empty():
print("")
return
cur = self.__head
while cur.next != self.__head:
print(cur.item, end=" ")
cur = cur.next
# 从循环退出,cur指向尾节点
print(cur.item) def add(self, item):
"""链表头部添加元素
:param item:要保存的具体数据"""
node = Node(item)
if self.is_empty():
self.__head = node
node.next = node
# 寻找尾节点
cur = self.__head
while cur.next != self.__head:
cur = cur.next
# 从循环退出,cur指向尾节点
node.next = self.__head
self.__head = node
cur.next = self.__head def append(self, item):
"""链表尾部添加元素"""
node = Node(item)
# 如果链表为空,需要特殊处理
if self.is_empty():
self.__head = node
else:
cur = self.__head
while cur.next != self.__head:
cur = cur.next
# 退出循环的时候,cur指向的尾节点
cur.next = node
node.next = self.__head def insert(self, pos, item):
"""指定位置添加元素"""
node = Node(item)
# 在头部添加元素
if pos <= 0:
self.add(item)
# 在尾部添加元素
elif pos >= self.length():
self.append(item)
else:
cur = self.__head
count = 0
while count < (pos-1):
count += 1
cur = cur.next
# 退出循环的时候,cur指向pos的前一个位置
node.next = cur.next
cur.next = node def remove(self,item):
"""删除节点"""
cur = self.__head
pre = None
while cur.next != self.__head:
# 找到要删除的元素
if cur.item == item:
# 在头部找到了要删除的元素
if cur == self.__head:
# 先找到尾节点
rear = self.__head
while rear.next != self.__head:
rear = rear.next
# 退出循环后,rear指向尾节点
self.__head = cur.next
rear.next = self.__head
# 在中间找到元素
else:
pre.next = cur.next
return
# 不是要找的元素,移动游标
pre = cur
cur = cur.next
# 退出循环后,cur指向尾节点
if cur.item == item:
# 链表只有一个节点:
if cur == self.__head:
self.__head = None
else:
pre.next = self.__head def search(self, item):
"""查找节点是否存在"""
if self.is_empty():
return False
cur = self.__head
while cur.next != self.__head:
if cur.item == item:
return True
cur = cur.next
# 退出循环后,cur指向尾节点
if cur.item == item:
return True
return False
if __name__ == '__main__':
ll = CycleSingleLinkList()
print(ll.length())
ll.travel() ll.append(1)
print(ll.length())
ll.travel() ll.append(2)
ll.travel() ll.add(3)
ll.travel() ll.insert(0, 4)
ll.travel() ll.insert(19, 5)
ll.travel() ll.insert(2, 6)
ll.travel() ll.remove(4)
ll.travel() ll.remove(5)
ll.travel() ll.remove(6)
ll.travel() ll.remove(3)
ll.travel() ll.remove(2)
ll.travel() ll.remove(1)
ll.travel()Traceback (most recent call last):
File "D:/Item/DataStructure/code/03_cycle_single_link_list.py", line 145, in
print(ll.length())
0
File "D:/Item/DataStructure/code/03_cycle_single_link_list.py", line 27, in length
while cur.next != self.__head:
AttributeError: 'NoneType' object has no attribute 'next'
Process finished with exit code 1
循环单链表 python_循环单链表报错相关推荐
- 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表
循环单链表 从任何一个结点出发都能访问到链表的每一个元素 判空条件不是头节点的后继指针是否为空,而是它是否等于头指针 有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指 ...
- (王道408考研数据结构)第二章线性表-第三节3:循环单链表和循环双链表
文章目录 一:循环链表定义 二:循环单链表 三:循环双链表 一:循环链表定义 循环链表:规定好头尾结点的指向形成成环状 循环单链表:其尾节点的next指针由原本的空改为指向头结点 循环双链表:其尾节点 ...
- 线性表文档之循环单链表
循环单链表 定义 概念 循环单链表是在单链表的基础上,将链表最后一个结点的 next 指针域指向了链表的第一个结点(如果单链表是带头结点的则最后一个结点的 next 指针域指向头结点:如果单链表是不带 ...
- 数据结构-循环单链表之魔术师发牌问题
问题描写叙述: 魔术师手中有A.2.3--J.Q.K十三张黑桃扑克牌.在表演魔术前,魔术师已经将他们依照一定的顺序叠放好(有花色的一面朝下).魔术表演过程为:一開始,魔术师数1,然后把最上面的那张牌翻 ...
- 循环单链表及C语言实现
本博文介绍循环单链表及其C语言的实现 目录 循环单链表 循环单链表的操作 插入 头结点插入 尾结点插入 指定位置插入 删除 头结点删除 尾结点删除 指定位置删除 遍历 查找 循环单链表的C语言实现 循 ...
- 【数据结构】循环单链表的实现(C语言)
循环单链表应掌握以下基本操作: 1.建立一个空的循环单链表. 2.获得循环单链表的最后一个结点的位置. 3.输出循环单链表中各结点的值. 4.在循环单链表中查找值为x的结点. 5.在循环单链表中第i个 ...
- 第二章——单链表和循环单链表
线性表--链表 顺序表需要事先占用一整块实现分配大小的存储空间,但是对于某些问题:很多空间只使用一次(甚至根本用不到),使用顺序表存储空间的利用率往往很低.于是需要一种能够动态管理存储空间的存储结构- ...
- 循环单链表的销毁操作
循环单链表销毁的时候,我的代码开始是这样子的 Status DestroyList_L(LinkList& L)//销毁链表 {Lnode* p;while (L){p = L;L = L-& ...
- 建立循环单链表(尾插法)
循环链表的操作实现算法与非循环链表的操作算法基本相同,只是对表尾的判断做了改变. 定义单链表的存储结构: typedef struct LinkList{int data;LinkList * nex ...
最新文章
- 第十五届全国大学生智能车安徽赛区参赛须知和竞赛日程安排
- python一:hello world
- 微服务实现事务一致性实例
- pmbok第七版_PMBOK第七版要来了!都有哪些变化?你准备好了么?
- paip.提升效率---filter map reduce 的java 函数式编程实现
- Swift 模式匹配
- R语言 需要安装的包
- UWA学堂|开发流程模块
- 数学建模matlab案例,数学建模案例matlab实用程序百例
- 开源物联网平台建设、参考解决方案
- MultiDesk 是一个选项卡(TAB标签)方式的远程桌面连接 (Terminal Services Client)。
- php数组中随机抽取,PHP 数组中随机抽取一些元素_PHP教程
- gflags简明使用指南
- ROS学习(一)Ros 中使用kinect
- 2013校园招聘阶段小结
- 快让你的App分20亿吧!
- 好莱坞十大经典动作片
- FusionInsight HD 华为大数据平台
- QT 删除QString空白字符
- HTPP的请求方式有哪些?
热门文章
- MFC开发IM-自绘按钮控件,给按钮设置背景图片
- 知乎香港IPO发售价定为每股32.06港元
- 祖龙娱乐2021年亏损3.03亿元 同比收窄60%
- 史上最大内存!曝iPhone 14 Pro系列运行内存将增至8GB
- LG显示将在坡州工厂为iPhone 14 Pro Max生产120Hz刷新率屏幕
- 三七互娱Q3归母净利润超预告上限,三大战略迎提速契机
- 消息称华为计划推出自有品牌电动汽车 官方重申不造车
- iPhone质量成迷?被吴彦祖一箭射穿,却还能开机
- 突然!iPhone 12/12 Pro从苹果天猫旗舰店下架,不愿参加双11活动?
- 雷军晒十多年前的手机:支持无线充电、内置8GB存储