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复制文件操作实例详解
Nov 10 Python
python中nan与inf转为特定数字方法示例
May 11 Python
Python实现霍夫圆和椭圆变换代码详解
Jan 12 Python
浅谈Python中重载isinstance继承关系的问题
May 04 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
Aug 02 Python
Python爬取数据保存为Json格式的代码示例
Apr 09 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
pytorch GAN伪造手写体mnist数据集方式
Jan 10 Python
Python响应对象text属性乱码解决方案
Mar 31 Python
Python实现仿射密码的思路详解
Apr 23 Python
PyQt5 控件字体样式等设置的实现
May 13 Python
python元组拆包实现方法
Feb 28 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
生成缩略图
2006/10/09 PHP
简单易用的计数器(数据库)
2006/10/09 PHP
Windows下的PHP5.0详解
2006/11/18 PHP
PHP开发注意事项总结
2015/02/04 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
laravel5表单唯一验证的实例代码
2019/09/30 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
jQuery中change事件用法实例
2014/12/26 Javascript
javascript使用smipleChart实现简单图表
2015/01/02 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
js实现下拉框效果(select)
2017/03/28 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
js实现点击生成随机div
2020/01/16 Javascript
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
python 函数内部修改外部变量的方法
2018/12/18 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
行政专员工作职责
2013/12/22 职场文书
小学老师寄语大全
2014/04/04 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
庆国庆活动总结
2014/08/28 职场文书
邀请函范文
2015/02/02 职场文书
2015年治庸问责工作总结
2015/07/27 职场文书
SQL基础查询和LINQ集成化查询
2022/01/18 MySQL