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转换摩斯密码示例
Feb 16 Python
Django URL传递参数的方法总结
Aug 28 Python
在python的类中动态添加属性与生成对象
Sep 17 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
Apr 11 Python
Python更新数据库脚本两种方法及对比介绍
Jul 27 Python
Python 操作文件的基本方法总结
Aug 10 Python
Python基于递归实现电话号码映射功能示例
Apr 13 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
Aug 30 Python
python使用tomorrow实现多线程的例子
Jul 20 Python
python实现银行管理系统
Oct 25 Python
python 实现线程之间的通信示例
Feb 14 Python
使用python创建股票的时间序列可视化分析
Mar 03 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
详解Python发送邮件实例
2016/01/10 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
Python正则表达式指南 推荐
2018/10/09 Python
破解安装Pycharm的方法
2018/10/19 Python
Python实现FTP文件传输的实例
2019/07/07 Python
python从PDF中提取数据的示例
2020/10/30 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
Html5新增标签有哪些
2017/04/13 HTML / CSS
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
中学自我评价
2014/01/31 职场文书
安全生产责任书
2014/03/12 职场文书
自我鉴定书
2014/03/24 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
统计员岗位职责范本
2015/04/14 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
pytorch 中nn.Dropout的使用说明
2021/05/20 Python