python/golang实现循环链表的示例代码


Posted in Python onSeptember 14, 2020

循环链表就是将单链表的末尾指向其头部,形成一个环。循环链表的增删操作和单链表的增删操作
区别不大。只是增加时,需要考虑空链表增加第一个节点的特殊情况;删除时需考虑删除节点是头/尾节点,和链表中只有一个节点的特殊情况。

golang实现:

type Node struct {
 value int
 next *Node
}

type Circle struct {
 tail *Node
 lenth int
}

// 增加节点:
func (c *Circle) add(value int) {
 newNode := &Node{value, nil}
 if c.lenth == 0 { //空链表中添加节点
 c.tail = newNode
 c.tail.next = newNode
 } else {
 newNode.next = c.tail.next
 c.tail.next = newNode
 c.tail = newNode
 }
 c.lenth += 1
 c.printCircle()
}

// 删除节点:
func (c *Circle) remove(v int) {
 if c.lenth == 0 {
 fmt.Println("空环")
 return
 } else if c.lenth == 1 && c.tail.value == v { //链表中只有一个节点的特殊情况
 c.tail = nil
 c.lenth = 0
 c.printCircle()
 return
 }
 pre := c.tail
 cur := c.tail.next // 头节点
 for i := 0; i < c.lenth; i++ {
 if cur.value == v {
  if cur == c.tail { //如果删除的节点是尾节点,需更新tail
  c.tail = pre
  }
  pre.next = cur.next
  c.lenth -= 1
  c.printCircle()
  return
 }
 pre = cur
 cur = cur.next
 }
 fmt.Println(v, "不在环中")
}

//打印节点:
func (c *Circle) printCircle() {
 if c.lenth == 0 {
 fmt.Println("空环")
 return
 }
 cur := c.tail.next // 头节点
 for i := 0; i < c.lenth; i++ {
 fmt.Printf("%d ", cur.value)
 cur = cur.next
 }
 fmt.Println()
}

func testCircle() {
 var circle *Circle = new(Circle)
 //for i := 1; i <=41; i++ {
 // circle.add(i)
 //}
 circle.add(1)
 circle.remove(10)
 circle.printCircle()
}

python实现:

class Node:
 def __init__(self, value, next=None):
 self.value = value
 self.next = next

 def __str__(self):
 return str(self.value)

class Circle:
 def __init__(self):
 self.tail = None
 self.lenth = 0

 # 增加节点
 def add(self, v):
 new_node = Node(v)
 if self.lenth == 0: # 空链表中添加节点
  self.tail = new_node
  self.tail.next = new_node
 else:
  new_node.next = self.tail.next
  self.tail.next = new_node
  self.tail = new_node
 self.lenth += 1

 # 删除节点
 def remove(self, v):
 if self.lenth == 0:
  print("空环")
  return
 elif self.lenth == 1 and self.tail.value == v: # 链表中只有一个节点的特殊情况
  self.tail = None
  self.lenth = 0
  return
 pre = self.tail
 cur = self.tail.next # 头节点
 for i in range(self.lenth):
  if cur.value == v:
  if cur == self.tail: # 如果删除的节点是尾节点,需更新tail
   self.tail = pre
  pre.next = cur.next
  self.lenth -= 1
  return
  pre = cur
  cur = cur.next
 print(v, "不在环中")

 # 打印链表
 def print_circle(self):
 if self.lenth == 0:
  print('空环')
  return
 cur = self.tail.next # 头节点
 for i in range(self.lenth):
  print(cur, end=" ")
  cur = cur.next
 print()


def test():
 c = Circle()
 for i in range(10):
 c.add(i)
 c.print_circle()
 c.remove(0)
 c.print_circle()
 c.remove(10)
 c.print_circle()
 c.remove(9)
 c.print_circle()
 c.remove(4)
 c.print_circle()

以上就是python/golang实现循环链表的示例代码的详细内容,更多关于python/golang 循环链表的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python使用multiprocessing实现一个最简单的分布式作业调度系统
Mar 14 Python
python正则表达式re之compile函数解析
Oct 25 Python
对python多线程SSH登录并发脚本详解
Feb 14 Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 Python
用Python实现校园通知更新提醒功能
Nov 23 Python
如何使用Python发送HTML格式的邮件
Feb 11 Python
对python中各个response的使用说明
Mar 28 Python
浅谈Python 参数与变量
Jun 20 Python
python文件及目录操作代码汇总
Jul 08 Python
总结Pyinstaller的坑及终极解决方法(小结)
Sep 21 Python
python读写数据读写csv文件(pandas用法)
Dec 14 Python
Python使用OpenCV实现虚拟缩放效果
Feb 28 Python
python实现canny边缘检测
Sep 14 #Python
Python gevent协程切换实现详解
Sep 14 #Python
通过实例了解python__slots__使用方法
Sep 14 #Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
Sep 14 #Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 #Python
Python利用pip安装tar.gz格式的离线资源包
Sep 14 #Python
Python tkinter制作单机五子棋游戏
Sep 14 #Python
You might like
SONY SRF-M100的电路分析
2021/03/02 无线电
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
JavaScript让IE浏览器event对象符合W3C DOM标准
2009/11/24 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
关于vue.js组件数据流的问题
2017/07/26 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
详解vue项目打包步骤
2019/03/29 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
python实现代码行数统计示例分享
2014/02/10 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
django创建自定义模板处理器的实例详解
2017/08/14 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
Keras搭建自编码器操作
2020/07/03 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
大学自我鉴定
2013/12/20 职场文书
后勤主管岗位职责
2014/03/01 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
湘江北去观后感
2015/06/15 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
yolov5返回坐标的方法实例
2022/03/17 Python