在c语言中,我们有指针来进行链式结构袁旭之间的连接,而python没有指针,那么这个时候我们应该怎么来用python来实现单链表呢?
这里我们可以用类来模拟指针,用类来定义一个节点类
7 class Node(object): 8 def __init__(self,elem): 9 self.elem = elem 10 self.next = None
这样我们就可以通过创建对象来实现一个节点的创建,其实大家有咩有发现,在这个代码中类的作用与c语言中的结构体有着异曲同工的作用,其都是用来创建一个新节点。
链表我们也通过一个类来实现,利用各种方法来实现链表的各种操作。链表操作的原理和c语言中的操作原理是一样的,话不多说直接上代码。
1 #****************************************************************** ******* 2 #> File Name: linklist.py 3 #> Author: 邹庭荣 4 #> Mail: 1198875194@qq.com 5 #> Created Time: 2020年10月30日 星期五 17时27分54秒 6 #***************************************************************** ********/ 7 class Node(object): 8 def __init__(self,elem): 9 self.elem = elem 10 self.next = None 11 class linklist(object): 12 def __init__(self,node = None):#链表的初始化 13 self.__head = node 14 self.curlen = 0 15 def empty(self): 16 if self.head == None: 17 raise Exception("链表为空") 18 def len(self): 19 return self.curlen 20 def add_head(self,item): 21 node = Node(item) 22 node.next = self.__head 23 self.__head = node 24 self.curlen += 1 25 def add_tail(self,item): 26 node = Node(item) 27 tempnode = self.__head 28 while tempnode != None: 29 tempnode = tempnode.next 30 tempnode.next = node 31 self.curlen += 1 32 def insert(self,location,item): 33 node = Node(item) 34 if location < 0 or location > self.curlen - 1: 35 raise Exception("插入位置非法") 36 elif location == 0: 37 self.add_head(item) 38 elif location == self.curlen: 39 tempnode = self.__head 40 while tempnode.next != None: 41 tempnode = tempnode.next 42 tempnode.next = node 43 self.curlen += 1 44 else: 45 tempnode = self.__head 46 for i in range(location - 1): 47 tempnode = tempnode.next 48 node.next = tempnode.next 49 tempnode.next = node 50 self.curlen += 1 51 def delitem(self,item): 52 if self.__head.elem == item: 53 self.__head = self.__head.next 54 else: 55 tempnode = self.__head 56 57 while tempnode!= None: 58 if tempnode.next.elem == item: 59 break 60 tempnode = tempnode.next 61 tempnode.next = tempnode.next.next 62 def change(self,item,changed_item): 63 tempnode = self.__head 64 while tempnode != None: 65 if tempnode.elem == item: 66 tempnode.elem = changed_item 67 break 68 def search(self,item): 69 tempnode = self.__head 70 while tempnode != None: 71 if tempnode.elem == item: 72 return True 73 tempnode = tempnode.next 74 return False 75 def display(self): 76 tempnode = self.__head 77 while tempnode != None: 78 print(tempnode.elem,end = " ") 79 tempnode = tempnode.next 80 print() 81 if __name__ == "__main__": 82 linklist1 = linklist() 83 linklist1.add_head(1) 84 linklist1.add_head(2) 85 linklist1.insert(0,3) 86 linklist1.display() 87 print(linklist1.curlen) 88 linklist1.delitem(2) 89 linklist1.display() 90 linklist1.change(3,4) 91 print(linklist1.search(4)) 92 linklist1.display()
运行结果:
3 2 1
3
3 1
这个代码我没有做过多的备注,其实只要你理解了链表的各种操作方法的基本原理,这些代码还是非常容易懂的。