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基于twisted框架编写简单聊天室
Jan 02 Python
python 连接各类主流数据库的实例代码
Jan 30 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
python二进制文件的转译详解
Jul 03 Python
Python 转换文本编码实现解析
Aug 27 Python
python 实现查询Neo4j多节点的多层关系
Dec 23 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
python利用线程实现多任务
Sep 18 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
Nov 02 Python
Python Web项目Cherrypy使用方法镜像
Nov 05 Python
python 检测nginx服务邮件报警的脚本
Dec 31 Python
pytorch中的model=model.to(device)使用说明
May 24 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/01/12 PHP
php返回字符串中所有单词的方法
2015/03/09 PHP
一个简单的php路由类
2016/05/29 PHP
php导出csv文件,可导出前导0实例代码
2016/11/16 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
关于document.cookie的使用javascript
2010/10/29 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
python+Django+apache的配置方法详解
2016/06/01 Python
Python守护线程用法实例
2017/06/23 Python
Django RBAC权限管理设计过程详解
2019/08/06 Python
softmax及python实现过程解析
2019/09/30 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
如何使用python代码操作git代码
2020/02/29 Python
python实现简单学生信息管理系统
2020/04/09 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
CSS3过渡transition效果实例介绍
2016/05/03 HTML / CSS
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
公司JAVA开发面试题
2015/04/02 面试题
网上商城创业计划书范文
2014/01/31 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
2016年党课培训学习心得体会
2016/01/07 职场文书
85句关于理想的名言警句大全
2019/08/22 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python