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在windows下实现ping操作并接收返回信息的方法
Mar 20 Python
python实现随机漫步算法
Aug 27 Python
Pandas GroupBy对象 索引与迭代方法
Nov 16 Python
对python 操作solr索引数据的实例详解
Dec 07 Python
python中如何使用分步式进程计算详解
Mar 22 Python
Python 计算任意两向量之间的夹角方法
Jul 05 Python
python OpenCV GrabCut使用实例解析
Nov 11 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
Nov 11 Python
Python tkinter常用操作代码实例
Jan 03 Python
Python 简单计算要求形状面积的实例
Jan 18 Python
如何利用python生成MD5并去重
Dec 07 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 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计算整个目录大小的方法
2015/06/01 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
JSON 数据格式介绍
2012/01/13 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
EasyUI实现下拉框多选功能
2017/11/07 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
javascript写一个ajax自动拦截并下载数据代码实例
2019/09/07 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
JavaScript 异步时序问题
2020/11/20 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
详解Python中with语句的用法
2015/04/15 Python
Python三级菜单的实例
2017/09/13 Python
django的settings中设置中文支持的实现
2019/04/28 Python
python时间time模块处理大全
2020/10/25 Python
Django2.1.7 查询数据返回json格式的实现
2020/12/29 Python
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
美国维生素、补充剂、保健食品购物网站:Vitacost
2016/08/05 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
计算机专业推荐信范文
2013/11/20 职场文书
少儿节目主持串词
2014/04/02 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
交警失职检讨书
2015/01/26 职场文书
小学生读书笔记范文
2015/06/30 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书
怎么禁用Win11输入法 最新Win11输入法关闭教程
2022/08/05 数码科技