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

算法复杂度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]

原文地址:https://www.cnblogs.com/xautxuqiang/p/6414650.html