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 数据的清理行为实例详解
Jul 12 Python
python中判断文件编码的chardet(实例讲解)
Dec 21 Python
Django使用httpresponse返回用户头像实例代码
Jan 26 Python
Flask框架通过Flask_login实现用户登录功能示例
Jul 17 Python
python得到一个excel的全部sheet标签值方法
Dec 10 Python
Python 串口读写的实现方法
Jun 12 Python
Django Rest framework三种分页方式详解
Jul 26 Python
解决django-xadmin列表页filter关联对象搜索问题
Nov 15 Python
python求最大公约数和最小公倍数的简单方法
Feb 13 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 Python
python如何删除文件、目录
Jun 23 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
Nov 25 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
php下图片文字混合水印与缩略图实现代码
2009/12/11 PHP
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
文字幻灯片
2006/06/26 Javascript
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
PHP中CURL的几个经典应用实例
2015/01/23 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
python集合删除多种方法详解
2020/02/10 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
nohup的用法
2014/08/10 面试题
年终自我鉴定
2013/10/09 职场文书
雪山饭庄的创业计划书范文
2014/01/18 职场文书
教师节商场活动方案
2014/02/13 职场文书
小学语文业务学习材料
2014/06/02 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
生产实习心得体会范文
2016/01/22 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers