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自动监控网站并发送邮件告警的方法
Aug 24 Python
python 接口返回的json字符串实例
Mar 27 Python
详谈python3 numpy-loadtxt的编码问题
Apr 29 Python
Python实现的绘制三维双螺旋线图形功能示例
Jun 23 Python
Django实现支付宝付款和微信支付的示例代码
Jul 25 Python
Python+PyQT5的子线程更新UI界面的实例
Jun 14 Python
构建高效的python requests长连接池详解
May 02 Python
Python如何基于Tesseract实现识别文字功能
Jun 05 Python
python为什么要安装到c盘
Jul 20 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
python批量提取图片信息并保存的实现
Feb 05 Python
Python实现简单的猜单词
Jun 15 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
PHP的面试题集
2006/11/19 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
php使用curl伪造浏览器访问操作示例
2019/09/30 PHP
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
vue vant中picker组件的使用
2020/11/03 Javascript
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
Pycharm github配置实现过程图解
2020/10/13 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
Boden美国官网:英伦原创时装品牌
2017/07/03 全球购物
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
《花瓣飘香》教学反思
2014/04/15 职场文书
2014年纪委工作总结
2014/12/05 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
感谢信的格式
2015/01/21 职场文书
起诉状范本
2015/05/20 职场文书
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android
python如何读取和存储dict()与.json格式文件
2022/06/25 Python