2.3 删除链表的中间节点和a/b处的节点
Posted latup
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.3 删除链表的中间节点和a/b处的节点相关的知识,希望对你有一定的参考价值。
题目:给定链表的头结点head,实现删除链表的中间节点的函数
例如:
1,不删除任何节点;
1 --> 2,删除节点1;
1 --> 2 --> 3,删除节点2;
1 --> 2 --> 3 --> 4,删除节点2;
1 --> 2 --> 3 --> 4 --> 5,删除节点3;
进阶:
给定链表的头节点head,整数a和b, 实现删除位于a/b处节点的函数
例如:
链表: 1 --> 2 --> 3 --> 4 --> 5,假设a/b的值为r
如果r等于0,不删除任何节点;
如果r在区间(0, 1/5]上,删除节点1;
如果r在区间(1/5, 2/5]上,删除节点2;
如果r在区间(2/5, 3/5]上,删除节点3;
如果r在区间(3/5, 4/5]上,删除节点4;
如果r在区间(4/5, 1]上,删除节点5;
如果r大于1,不删除任何节点
My:
1 def del_midnode(L): 2 if L.length > 1: 3 L.delt((L.length+1)//2)
Reference:
1 def del_midnode(L): 2 p = L.head 3 # if linklist is empty or only have one node 4 if p.next == None or p.next.next == None: 5 return 6 # if linklist only have two nodes, then delete the first 7 if p.next.next.next == None: 8 p.next = p.next.next 9 return 10 # if linklist has not less than three nodes 11 pre = p.next 12 cur = pre.next.next 13 while cur.next != None and cur.next.next != None: 14 pre = pre.next 15 cur = cur.next.next 16 pre.next = pre.next.next
思想:如果链表为空或者长度为1, 则不删除任何结点;如果链表长度为2,将头结点删除;如果链表长度不少于3:当长度为3,则删除结点2;当长度为4,则删除结点2;当长度为5,则删除结点3......从以上分析可看出,当链表长度大于3时,链表长度每增加2(3, 5, 7...),要删除的节点就后移一个位置。
以上是关于2.3 删除链表的中间节点和a/b处的节点的主要内容,如果未能解决你的问题,请参考以下文章