发布时间:2019-07-17 10:08:44编辑:auto阅读(1345)
#encoding:utf-8 import sys class Lnode(): def __init__(self,elem,next=None): self.elem = elem #节点的值 self.next = next #指向下一个节点 def getelem(self): return self.elem def getnext(self): return self.next class linklist(object): def __init__(self): L = Lnode(None,None) self.head = L #定义头节点 self.length = 0 #链表元素个数 # 链表是否为空 def isempty(self): if self.head.next is None: return True else: return False def getlength(self): return self.length #尾部添加 def append(self,elem): newNode = Lnode(elem) if self.head.next is None: self.head.next = newNode else: p = self.head while p.next is not None: p = p.next p.next = newNode self.length += 1 #头部添加 def headpush(self,elem): newNode = Lnode(elem) if self.isempty(): self.head.next = newNode else: newNode.next = self.head.next self.head.next = newNode self.length += 1 #在指定元素的位置后面插入 def insertafter(self,elem,newelem): newNode = Lnode(newelem) if self.find(elem) == -1: print "%s in the link list" %elem return -1 else: #如果在链表中找到元素elem p = self.find(elem) if p.next is None: p.next = newNode else: newNode.next = p.next p.next = newNode self.length += 1 # 在指定元素的位置前面插入 def insertbefor(self,elem,newelem): newNode = Lnode(newelem) if self.find(elem) == -1: print "%s in not the link list" % elem return -1 else: p = self.head q = self.find(elem) while p is not None: if p.next == q: break p = p.next newNode.next = q p.next = newNode self.length += 1 #遍历链表 def for_each(self): if self.head.next is None: print "empty" return else: p = self.head while p.next is not None: p = p.next sys.stdout.write("%s " %(p.elem)) print return #查找元素,返回指向该元素的节点 def find(self,elem): #找到元素返回节点,未找到返回-1 if self.isempty(): print "sorry,is empty" return -1 else: p = self.head while p is not None: if p.elem == elem: return p else: p = p.next return -1 #修改指定元素 def modify(self,elem,newelem): if self.find(elem) != -1: #如果找到 p = self.find(elem) p.elem = newelem return 0 else: print "%s is not in the linklist" %elem return -1 #删除指定元素 def delnode(self,elem): if self.find(elem) != -1: #如果找到 p = self.find(elem) q = self.head while q.next != p: q = q.next q.next = p.next p.next = None else: print "%s is not in the linklist" %elem return -1 def main(): #创建链表 ll = linklist() print ll.isempty() #尾部添加元素 ll.append(3) ll.append(4) ll.append(5) ll.for_each() print ll.getlength() #首部添加元素 ll.headpush(2) ll.for_each() print ll.getlength() #查找元素 print ll.find(3).elem ll.insertafter(3,3.3) ll.for_each() print ll.getlength() #测试后插法 ll.insertafter(1,1.1) #测试前插法 ll.insertbefor(5,3.9) ll.for_each() print ll.getlength() #修改指定元素 ll.modify(3.9,44) ll.for_each() ll.modify(3.8,88) #删除指定元素 ll.delnode(3.3) ll.for_each() ll.delnode(2) ll.delnode(2) ll.delnode(3) ll.delnode(4) ll.delnode(44) ll.delnode(5) ll.for_each() if __name__ == '__main__': main()
运行结果
True
3 4 5
3
2 3 4 5
4
3
2 3 3.3 4 5
5
1 in the link list
2 3 3.3 4 3.9 5
6
2 3 3.3 4 44 5
3.8 is not in the linklist
2 3 4 44 5
2 is not in the linklist
empty
Process finished with exit code 0
上一篇: Python -- pdb调试工具
下一篇: Python读取和写入文件
47484
45786
36784
34317
28955
25589
24436
19606
19102
17627
5458°
6041°
5563°
5632°
6565°
5370°
5370°
5878°
5851°
7163°