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 linecache.getline()读取文件中特定一行的脚本
Sep 06 Python
Python多线程学习资料
Dec 19 Python
Python协程的用法和例子详解
Sep 09 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
python去掉空白行的多种实现代码
Mar 19 Python
Python变量赋值的秘密分享
Apr 03 Python
Python Django框架防御CSRF攻击的方法分析
Oct 18 Python
python实现3D地图可视化
Mar 25 Python
python3中的logging记录日志实现过程及封装成类的操作
May 12 Python
Django 解决由save方法引发的错误
May 21 Python
Tensorflow tf.tile()的用法实例分析
May 22 Python
安装并免费使用Pycharm专业版(学生/教师)
Sep 24 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查询ip所在地的方法
2014/12/05 PHP
js 居中漂浮广告
2010/03/21 Javascript
Exjs 入门篇
2010/04/07 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
javascript插件开发的一些感想和心得
2016/02/28 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
Node.js中的http请求客户端示例(request client)
2017/05/04 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
node.js基于express使用websocket的方法
2017/11/09 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
Python爬取读者并制作成PDF
2015/03/10 Python
PyMongo安装使用笔记
2015/04/27 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
护理专业自荐信
2013/12/03 职场文书
婚礼主持结束词
2014/03/13 职场文书
捐助倡议书范文
2014/04/15 职场文书
村级四风对照检查材料
2014/08/24 职场文书
课外小组活动总结
2014/08/27 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
情况说明书怎么写
2015/10/08 职场文书
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python