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