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使用scrapy解析js示例
Jan 23 Python
Python深入学习之闭包
Aug 31 Python
使用python实现个性化词云的方法
Jun 16 Python
Python3中简单的文件操作及两个简单小实例分享
Jun 18 Python
Python 字符串转换为整形和浮点类型的方法
Jul 17 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 26 Python
Django实现表单验证
Sep 08 Python
对python调用RPC接口的实例详解
Jan 03 Python
将python图片转为二进制文本的实例
Jan 24 Python
在Windows下安装配置CPU版的PyTorch的方法
Apr 02 Python
Python3接口性能测试实例代码
Jun 20 Python
python神经网络 使用Keras构建RNN训练
May 04 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
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
php开发环境配置记录
2011/01/14 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
详解vue 模版组件的三种用法
2017/07/21 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
Vue官网todoMVC示例代码
2018/01/29 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
2018/04/22 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
详解Python中最难理解的点-装饰器
2017/04/03 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
使用pytorch进行图像的顺序读取方法
2018/07/27 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
英国第一独立滑雪板商店:The Snowboard Asylum
2020/01/16 全球购物
大学自我评价
2014/02/12 职场文书
厂长岗位职责
2014/02/19 职场文书
综合管理员岗位职责
2015/02/11 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python
浅谈node.js中间件有哪些类型
2021/04/29 Javascript
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
SQL Server 中的事务介绍
2022/05/20 SQL Server