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 list切片原理
Oct 27 Python
Python爬虫设置代理IP(图文)
Dec 23 Python
对Python3 * 和 ** 运算符详解
Feb 16 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
为什么你还不懂得怎么使用Python协程
May 13 Python
python 读写excel文件操作示例【附源码下载】
Jun 19 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
Python解压 rar、zip、tar文件的方法
Nov 19 Python
使用PyCharm官方中文语言包汉化PyCharm
Nov 18 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
Dec 31 Python
python re模块常见用法例举
Mar 01 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
NOD32 v2.70.32 简体中文封装版 提供下载了
2007/02/27 PHP
php 来访国内外IP判断代码并实现页面跳转
2009/12/18 PHP
php获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
2016/05/30 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
d3.js实现图形缩放平移
2019/12/19 Javascript
JS实现图片切换特效
2019/12/23 Javascript
jQuery实时统计输入框字数及限制
2020/06/24 jQuery
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
编程语言Python的发展史
2014/09/26 Python
python实现在字符串中查找子字符串的方法
2015/07/11 Python
python使用turtle库绘制时钟
2020/03/25 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
python实现程序重启和系统重启方式
2020/04/16 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
CSS3中文字镂空、透明值、阴影效果设置示例小结
2016/03/07 HTML / CSS
生产部主管岗位职责
2014/01/06 职场文书
英语自我评价范文
2014/01/24 职场文书
个人简历自我评价范文
2014/02/04 职场文书
村党的群众路线教育实践活动总结材料
2014/10/31 职场文书
杜甫草堂导游词
2015/02/03 职场文书
2015年教学管理工作总结
2015/05/20 职场文书