首页 > 编程语言 > 详细

编写程序,实现在带头结点的单链表L中删除一个最小值节点的算法。

时间:2017-02-19 10:32:39      阅读:1552      评论:0      收藏:0      [点我收藏+]

算法复杂度0(n)

 

 1 #!/usr/bin/env python3
 2 
 3 class LNode(object):
 4         def __init__(self, elem, next_=None):
 5                 self.elem = elem
 6                 self.next = next_
 7 
 8 class Rm_Small_List(object):
 9         def __init__(self):
10                 self.head = None
11                 self.num = 0
12 
13         def prepend(self, elem):
14                 self.head = LNode(elem, self.head)
15                 self.num += 1
16 
17         def rm_small(self):
18                 p = self.head
19                 small = p.elem
20                 while p.next:
21                         p = p.next
22                         if small > p.elem:
23                                 small = p.elem
24                 p = self.head
25                 pre = None
26                 while p:
27                         if not pre and p.elem == small:
28                                 self.head = self.head.next
29                                 return
30                         if p.elem == small:
31                                 pre.next = p.next
32                                 return
33                         pre = p
34                         p = p.next
35 
36         def bianli(self):
37                 p = self.head
38                 li = []
39                 while p:
40                         li.append(p.elem)
41                         p = p.next
42                 return li
43 
44 if __name__ == __main__:
45         l = Rm_Small_List()
46         l.prepend(8)
47         l.prepend(2)
48         l.prepend(3)
49         l.prepend(5)
50         print(l.bianli())
51         l.rm_small()
52         print(l.bianli())

 

结果:

[5, 3, 2, 8]
[5, 3, 8]

编写程序,实现在带头结点的单链表L中删除一个最小值节点的算法。

原文:http://www.cnblogs.com/xautxuqiang/p/6414650.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!