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删除指定类型(或非指定)的文件实例详解
Jul 06 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
pandas.DataFrame选取/排除特定行的方法
Jul 03 Python
flask框架使用orm连接数据库的方法示例
Jul 16 Python
对Python信号处理模块signal详解
Jan 09 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
python字典按照value排序方法
Dec 28 Python
Matplotlib配色之Colormap详解
Jan 05 Python
详解python的xlwings库读写excel操作总结
Feb 26 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 ICF-2010 拆解与改装
2021/03/02 无线电
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
javascript引导程序
2008/10/26 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
浅谈Javascript面向对象编程
2011/11/15 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
Javascript中的对象和原型(二)
2016/08/12 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
零基础写python爬虫之神器正则表达式
2014/11/06 Python
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
PHP面试题及答案二
2015/05/23 面试题
配置管理计划的主要内容有哪些
2014/06/20 面试题
预防煤气中毒方案
2014/06/16 职场文书
企业趣味活动方案
2014/08/21 职场文书
婚庆公司计划书
2014/09/15 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
体育教师教学随笔
2015/08/15 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python
Python 数据结构之十大经典排序算法一文通关
2021/10/16 Python