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 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
Python pickle模块用法实例分析
May 27 Python
HTML中使用python屏蔽一些基本功能的方法
Jul 07 Python
python删除过期log文件操作实例解析
Jan 31 Python
1分钟快速生成用于网页内容提取的xslt
Feb 23 Python
Python基于最小二乘法实现曲线拟合示例
Jun 14 Python
Python实现程序判断季节的代码示例
Jan 28 Python
python 实现12bit灰度图像映射到8bit显示的方法
Jul 08 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
Python celery原理及运行流程解析
Jun 13 Python
matplotlib图例legend语法及设置的方法
Jul 28 Python
Python+unittest+DDT实现数据驱动测试
Nov 30 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中的内存管理问题
2011/08/31 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
JavaScript 拾漏补遗
2009/12/27 Javascript
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
jQuery EasyUI常用数据验证汇总
2016/09/18 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
jQuery Pagination分页插件_动力节点Java学院整理
2017/07/17 jQuery
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
python使用cookielib库示例分享
2014/03/03 Python
Django的分页器实例(paginator)
2017/12/01 Python
Python中django学习心得
2017/12/06 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
python读取中文txt文本的方法
2018/04/12 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Python ellipsis 的用法详解
2020/11/20 Python
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
计算机系毕业生推荐信
2013/11/06 职场文书
创建省级文明单位实施方案
2014/02/27 职场文书
感恩母亲节活动方案
2014/03/04 职场文书
工作感想范文
2015/08/07 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书