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多线程编程中的join函数使用心得
Sep 02 Python
用Python实现一个简单的线程池
Apr 07 Python
Python实现的最近最少使用算法
Jul 10 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
Jan 20 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
基于python中pygame模块的Linux下安装过程(详解)
Nov 09 Python
Pandas中Series和DataFrame的索引实现
Jun 27 Python
Django的性能优化实现解析
Jul 30 Python
Python利用WMI实现ping命令的例子
Aug 14 Python
使用python 计算百分位数实现数据分箱代码
Mar 03 Python
Python工程师必考的6个经典面试题
Jun 28 Python
python实现网络五子棋
Apr 11 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
Discuz 模板引擎的封装类代码
2008/07/18 PHP
elgg 获取文件图标地址的方法
2010/03/20 PHP
php中将数组存到文件里的实现代码
2012/01/19 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
新闻内页-JS分页
2006/06/07 Javascript
prototype Element学习笔记(篇二)
2008/10/26 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
nodejs中实现阻塞实例
2015/03/24 NodeJs
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
简介JavaScript中toTimeString()方法的使用
2015/06/12 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
angularjs ui-router中路由的二级嵌套
2017/03/10 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
Python定时器实例代码
2017/11/01 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
利用python在excel中画图的实现方法
2020/03/17 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
Aosom西班牙:家具在线商店
2020/06/11 全球购物
市场营销职业生涯规划书范文
2014/01/12 职场文书
护校行动方案
2014/05/31 职场文书
防火标语大全
2014/10/06 职场文书
学校师德师风整改措施
2014/10/27 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
遗失证明范文
2015/06/19 职场文书