python/golang 删除链表中的元素


Posted in Python onSeptember 14, 2020

先用使用常规方法,两个指针:

golang实现:

type Node struct {
  value int
  next *Node
}

type Link struct {
  head *Node
  tail *Node
  lenth int
}

// 向链表中添加元素
func (link *Link) add(v int) {
  if link.lenth == 0 { // 当前链表是空链表
    link.head = &Node{v, nil}
    link.tail = link.head
    link.lenth = 1
  } else {
    newNond := &Node{v, nil}
    link.tail.next = newNond
    link.tail = newNond
    link.lenth += 1
  }
}

// 删除链表中的元素(双指针)
func (link *Link) remove(v int) {
  if link.lenth == 0 {
    fmt.Println("空链表,不支持该操作")
    return
  }
  var previous *Node = nil
  for current := link.head; current != nil; current = current.next {
    if current.value == v {
      if current == link.head { // 要删除的是头节点
        link.head = current.next
      } else if current == link.tail { // 要删除的是尾节点
        previous.next = nil
        link.tail = previous
      } else { // 要删除的是中间的节点
        previous.next = current.next
      }
      link.lenth -= 1
      break
    }
    previous = current
  }
}

// 打印链表
func (link *Link) printList() {
  if link.lenth == 0 {
    fmt.Println("空链表")
    return
  }
  for cur := link.head; cur != nil; cur = cur.next {
    fmt.Printf("%d ", cur.value)
  }
  fmt.Println()
}

python实现:

class Node:
  def __init__(self, value, next):
    self.value = value
    self.next = next

  def __str__(self):
    return str(self.value)

class Link:
  def __init__(self):
    self.head = None
    self.tail = None
    self.lenth = 0

  # 向链表中添加元素
  def add(self, v):
    if self.lenth == 0: # 当前链表是空链表
      self.head = Node(v, None)
      self.tail = self.head
      self.lenth = 1
    else:
      new_node = Node(v, None)
      self.tail.next = new_node
      self.tail = new_node
      self.lenth += 1

  # 打印链表
  def print(self):
    if self.lenth == 0:
      print('空链表')
      return
    cur = self.head
    while True:
      if cur == None:
        print()
        break
      print(cur, end=' ')
      cur = cur.next

  # 删除链表中的元素
  def remove(self, v):
    if self.lenth == 0:
      return
    cur = self.head
    pre = None
    while True:
      if cur.value == v:
        if cur == self.head: # 要删除的是头节点
          self.head = cur.next
        elif cur == self.tail: # 要删除的是尾节点
          pre.next = None
          self.tail = pre
        else: # 要删除的是中间的节点
          pre.next = cur.next
        self.lenth -= 1
        break
      pre = cur
      cur = cur.next
      if cur == None:
        print("未找到", v)
        break

只使用使用一个指针实现链表的删除:

python/golang 删除链表中的元素

golang实现:

func (link *Link) remove_with_one_pointer(v int) {
  if link.lenth == 0 {
    return
  }
  if link.tail.value == v { // 要删除的节点是尾节点,需特殊处理
    if link.lenth == 1 { // 如果链表只有一个节点
      link.head = nil
      link.tail = nil
    } else { //大于一个节点
      cur := link.head
      for ; cur.next.next != nil; cur = cur.next {
      } //找到尾节点的前一个节点
      cur.next = nil
      link.tail = cur
    }
    link.lenth -= 1
    return
  }
  //要删除的节点在头部/中间 的常规情况
  for cur := link.head; cur != nil; cur = cur.next {
    if cur.value == v {
      cur.value = cur.next.value
      cur.next = cur.next.next
      link.lenth -= 1
      return
    }
  }
  fmt.Println("未找到", v)
}

python实现:

def remove_with_one_pointer(self, v):
  if self.lenth == 0:
    return
  if self.tail.value == v: # 要删除的节点是尾节点,需特殊处理
    if self.lenth == 1: # 如果链表只有一个节点
      self.head = None
      self.tail = None
    else: # 大于一个节点
      cur = self.head
      while True:
        if cur.next.next is None: # 找到尾节点的前一个节点
          break
        else:
          cur = cur.next
      cur.next = None
      self.tail = cur
    self.lenth -= 1
    return
  # 要删除的节点在头部/中间 的常规情况
  cur = self.head
  while True:
    if cur.value == v:
      cur.value = cur.next.value
      cur.next = cur.next.next
      self.lenth -= 1
      break
    cur = cur.next
    if cur is None:
      print('未找到', v)
      break

以上就是python/golang 删除链表中的元素的详细内容,更多关于python/golang 链表的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中replace方法实例分析
Aug 20 Python
Python yield 使用浅析
May 28 Python
Python实现批量读取word中表格信息的方法
Jul 30 Python
python 系统调用的实例详解
Jul 11 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 Python
tensorflow如何批量读取图片
Aug 29 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
Apr 16 Python
Python分析最近大火的网剧《隐秘的角落》
Jul 02 Python
Python发送邮件实现基础解析
Aug 14 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
PyTorch 中的傅里叶卷积实现示例
Dec 11 Python
Python基于pillow库实现生成图片水印
Sep 14 #Python
python/golang实现循环链表的示例代码
Sep 14 #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
You might like
一个php作的文本留言本的例子(一)
2006/10/09 PHP
关于crontab的使用详解
2013/06/24 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
javascript 构造函数方式定义对象
2015/01/02 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
Node.js编写组件的三种实现方式
2016/02/25 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
python中enumerate的用法实例解析
2014/08/18 Python
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
python中global与nonlocal比较
2014/11/21 Python
Python中shutil模块的常用文件操作函数用法示例
2016/07/05 Python
python中日志logging模块的性能及多进程详解
2017/07/18 Python
python 去除二维数组/二维列表中的重复行方法
2019/01/23 Python
美国领先的汽车轮胎和轮毂供应商:TireBuyer
2016/07/21 全球购物
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
什么是GWT的Module
2013/01/20 面试题
Java基础面试题
2012/11/02 面试题
校园创业策划书
2014/01/14 职场文书
火锅店营销方案
2014/02/26 职场文书
项目投资合作意向书
2014/07/29 职场文书
企业安全生产规章制度
2015/08/06 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS