码迷,mamicode.com
首页 > 其他好文 > 详细

2.3 删除链表的中间节点和a/b处的节点

时间:2018-10-22 14:38:08      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:not   list   first   --   style   大于   ESS   题目   length   

题目:给定链表的头结点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处的节点

标签:not   list   first   --   style   大于   ESS   题目   length   

原文地址:https://www.cnblogs.com/latup/p/9829471.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!