删除链表中的中间节点和 a/b 处的结点 Python 版
2017-11-28 20:51
337 查看
题目:
给定一个链表的头结点 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处的结点。
代码:
分析:
核心还是删除一个链表的结点的操作,只是删除哪一个的问题,找到那一个就可以了。删除一个结点的函数我已经在线性链表的实现中写过了。
给定一个链表的头结点 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 math class 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
分析:
核心还是删除一个链表的结点的操作,只是删除哪一个的问题,找到那一个就可以了。删除一个结点的函数我已经在线性链表的实现中写过了。
相关文章推荐
- 单链表的创建和遍历、求单链表中节点的个数、查找单链表中的中间结点、判断单链表是否有环、取出有环链表中环的长度,删除有序链表中的重复结点
- 带头结点的链表头插,尾插,中间插以及删除节点
- 建立一个带附加头结点的单链表.实现测长/打印/删除结点/插入结点/逆置/查找中间节点/查找倒数第k个节点/判断是否有环
- c++中对单链表操作---合并两个链表&&单链表逆序&&删除链表中的中间结点
- LeetCode--Delete Node in a Linked List(删除链表中的节点)Python
- 删除链表的中间节点
- java建立双向链表,插入结点,删除节点
- 链表操作二——中间结点的删除等
- 链表问题 删除链表的中间节点和a/b处的节点
- 链表问题(2)-- 删除聊表的中间节点和a/b处的节点
- 链表:增加结点与删除节点
- python实现单链表中删除倒数第K个节点的方法
- python---删除链表中倒数第n个节点
- 数据结构:设有一个不带头结点的单链表L,设计两个递归算法,del(L,x)删除单链表L中第一个值为x的节点,delall(L,x)删除单链表L中的最小节点值。
- 删除链表中间节点
- (转)问题:假设一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(既不是第一个,也不是最后一个节点),请将该节点从单链表中删除。
- 设一个没有头结点指针的单链表。一个指针指向此单链表中间的一个结点(不是第一个,也不是最后一个结点),将该结点从单链表中删除,要求时间复杂度O(1)。
- 删除链表中间节点
- java实现创建链表以及插入节点,查找结点,删除节点等操作
- 删除单向链表中间的某个结点