删除链表中的中间节点和 a/b 处的结点 Python 版
来源:互联网 发布:数据交换共享 编辑:程序博客网 时间:2024/05/23 16:56
题目:
给定一个链表的头结点 head,实现删除链表中的中间节点的函数。
例如:给定链表[1, 5, 12, 33, 45, 171, 999, 1001, 2000],删除结点 45,
给定链表[1, 5, 12, 33, 45, 171, 999, 1001],删除结点 33。
如果链表为空或长度为1,则不删除任何结点。
拓展:
给定一个链表的头结点 head,整数 a 和 b,实现删除链表中 a/b 处的结点。也就是说,head *a/b处的结点。
代码:
import mathclass LinkedListAlgorithms(object): def __init__(self): pass def rm_mid_node(self, head): # 给定一个链表,删除它的中间的一个结点,返回头指针 if head == 0: return head p = head length = 1 while p != 0: length += 1 p = p.next if length == 1: return head mid = length / 2 for _ in xrange(1, mid-1): head = head.next head.next = head.next.next return head def rm_by_ratio(self, head, a, b): # 给定一个链表,删除它按比例的 a/b处的一个结点,返回头指针 if a > b: print "The given a should be lower than b." return head if head == 0: return head p = head length = 1 while p != 0: length += 1 p = p.next if length == 1: return head ratio = length*float(a)/float(b) for _ in xrange(1, int(math.ceil(ratio))-1): head = head.next head.next = head.next.next return head
分析:
核心还是删除一个链表的结点的操作,只是删除哪一个的问题,找到那一个就可以了。删除一个结点的函数我已经在线性链表的实现中写过了。
阅读全文
0 0
- 删除链表中的中间节点和 a/b 处的结点 Python 版
- 链表问题---删除链表的中间节点和a/b处的节点
- 链表问题 删除链表的中间节点和a/b处的节点
- 删除链表的中间节点和a/b处的节点
- 链表问题(2)-- 删除聊表的中间节点和a/b处的节点
- 删除链表的中间节点和a/b处的节点
- 【链表】- 删除链表的中间节点和a/b处的节点
- 删除链表的中间节点和a/b处节点
- 链表问题——删除链表的中间节点和a/b处的节点
- 左程云_算法与数据结构 — 链表问题 — 03删除链表的中间节点和a/b处的节点
- 删除链表的中间结点
- 删除链表a/b处的节点(链表)
- 有两个链表a和b,设结点中包含学号和姓名,从a链表中删除和b链表中相同学号的结点
- 寻找和删除链表的中间节点
- 左神的书——《程序员代码面试指南》之删除链表的中间节点或a/b节点 c++实现
- 删除链表的中间节点
- 删除链表的中间节点
- 删除链表的中间节点
- 在 JavaScript 中为什么 typeof null 的结果是 object?为什么呢?
- Nginx安装手册
- java-pdf转word3.0
- 二叉树
- 互斥锁与读写锁使用
- 删除链表中的中间节点和 a/b 处的结点 Python 版
- java面试(2)
- 给定一个百分制的分数,输出相应的等级。 90分以上 A级 80~89 B级 70~79 C级
- 使用ArrayList集合,对其添加100个不同的元素: 1.使用add()方法将元素添加到ArrayList集合对象中; 2.调用集合的iterator()方法获得Iterator对象,并调用Ite
- 揭秘京东文件系统JFS的前世今生,支持双11每秒约10万个对象同时读写
- Mac “'geckodriver' executable needs to be in PATH”
- Windows上安装ArcGIS Portal10.5以 Windows Server 2012 R2上安装ArcGIS Enterprise10.5
- Leetcode 算法设计 第十三周
- 求出1*2*3*4******10的值?