该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

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_循环单链表报错相关推荐

  1. 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表

    循环单链表 从任何一个结点出发都能访问到链表的每一个元素 判空条件不是头节点的后继指针是否为空,而是它是否等于头指针 有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指 ...

  2. (王道408考研数据结构)第二章线性表-第三节3:循环单链表和循环双链表

    文章目录 一:循环链表定义 二:循环单链表 三:循环双链表 一:循环链表定义 循环链表:规定好头尾结点的指向形成成环状 循环单链表:其尾节点的next指针由原本的空改为指向头结点 循环双链表:其尾节点 ...

  3. 线性表文档之循环单链表

    循环单链表 定义 概念 循环单链表是在单链表的基础上,将链表最后一个结点的 next 指针域指向了链表的第一个结点(如果单链表是带头结点的则最后一个结点的 next 指针域指向头结点:如果单链表是不带 ...

  4. 数据结构-循环单链表之魔术师发牌问题

    问题描写叙述: 魔术师手中有A.2.3--J.Q.K十三张黑桃扑克牌.在表演魔术前,魔术师已经将他们依照一定的顺序叠放好(有花色的一面朝下).魔术表演过程为:一開始,魔术师数1,然后把最上面的那张牌翻 ...

  5. 循环单链表及C语言实现

    本博文介绍循环单链表及其C语言的实现 目录 循环单链表 循环单链表的操作 插入 头结点插入 尾结点插入 指定位置插入 删除 头结点删除 尾结点删除 指定位置删除 遍历 查找 循环单链表的C语言实现 循 ...

  6. 【数据结构】循环单链表的实现(C语言)

    循环单链表应掌握以下基本操作: 1.建立一个空的循环单链表. 2.获得循环单链表的最后一个结点的位置. 3.输出循环单链表中各结点的值. 4.在循环单链表中查找值为x的结点. 5.在循环单链表中第i个 ...

  7. 第二章——单链表和循环单链表

    线性表--链表 顺序表需要事先占用一整块实现分配大小的存储空间,但是对于某些问题:很多空间只使用一次(甚至根本用不到),使用顺序表存储空间的利用率往往很低.于是需要一种能够动态管理存储空间的存储结构- ...

  8. 循环单链表的销毁操作

    循环单链表销毁的时候,我的代码开始是这样子的 Status DestroyList_L(LinkList& L)//销毁链表 {Lnode* p;while (L){p = L;L = L-& ...

  9. 建立循环单链表(尾插法)

    循环链表的操作实现算法与非循环链表的操作算法基本相同,只是对表尾的判断做了改变. 定义单链表的存储结构: typedef struct LinkList{int data;LinkList * nex ...

最新文章

  1. 第十五届全国大学生智能车安徽赛区参赛须知和竞赛日程安排
  2. python一:hello world
  3. 微服务实现事务一致性实例
  4. pmbok第七版_PMBOK第七版要来了!都有哪些变化?你准备好了么?
  5. paip.提升效率---filter map reduce 的java 函数式编程实现
  6. Swift 模式匹配
  7. R语言 需要安装的包
  8. UWA学堂|开发流程模块
  9. 数学建模matlab案例,数学建模案例matlab实用程序百例
  10. 开源物联网平台建设、参考解决方案
  11. MultiDesk 是一个选项卡(TAB标签)方式的远程桌面连接 (Terminal Services Client)。
  12. php数组中随机抽取,PHP 数组中随机抽取一些元素_PHP教程
  13. gflags简明使用指南
  14. ROS学习(一)Ros 中使用kinect
  15. 2013校园招聘阶段小结
  16. 快让你的App分20亿吧!
  17. 好莱坞十大经典动作片
  18. FusionInsight HD 华为大数据平台
  19. QT 删除QString空白字符
  20. HTPP的请求方式有哪些?

热门文章

  1. MFC开发IM-自绘按钮控件,给按钮设置背景图片
  2. 知乎香港IPO发售价定为每股32.06港元
  3. 祖龙娱乐2021年亏损3.03亿元 同比收窄60%
  4. 史上最大内存!曝iPhone 14 Pro系列运行内存将增至8GB
  5. LG显示将在坡州工厂为iPhone 14 Pro Max生产120Hz刷新率屏幕
  6. 三七互娱Q3归母净利润超预告上限,三大战略迎提速契机
  7. 消息称华为计划推出自有品牌电动汽车 官方重申不造车
  8. iPhone质量成迷?被吴彦祖一箭射穿,却还能开机
  9. 突然!iPhone 12/12 Pro从苹果天猫旗舰店下架,不愿参加双11活动?
  10. 雷军晒十多年前的手机:支持无线充电、内置8GB存储