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 24 Python
python实现自动登录人人网并采集信息的方法
Jun 28 Python
Python中基本的日期时间处理的学习教程
Oct 16 Python
理解python正则表达式
Jan 15 Python
Python的UTC时间转换讲解
Feb 26 Python
python中嵌套函数的实操步骤
Feb 27 Python
Python去除字符串前后空格的几种方法
Mar 04 Python
对django views中 request, response的常用操作详解
Jul 17 Python
Python队列RabbitMQ 使用方法实例记录
Aug 05 Python
python 字典访问的三种方法小结
Dec 05 Python
Selenium基于PIL实现拼接滚动截图
Apr 10 Python
Python中Qslider控件实操详解
Feb 20 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入门学习笔记之一
2010/10/12 PHP
理解php Hash函数,增强密码安全
2011/02/25 PHP
The specified CGI application misbehaved by not returning a complete set of HTTP headers
2011/03/31 PHP
PHP实现的sqlite数据库连接类
2014/12/12 PHP
php实现将Session写入数据库
2015/07/26 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
Laravel中任务调度console使用方法小结
2017/05/07 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
原生JS实现汇率转换功能代码实例
2020/05/13 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
详解datagrid使用方法(重要)
2020/11/06 Javascript
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
WxPython建立批量录入框窗口
2019/02/27 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
详解python metaclass(元类)
2020/08/13 Python
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
公务员培训自我鉴定
2014/02/01 职场文书
员工担保书范本
2015/09/22 职场文书