单向链表
1 class Node(object): 2 def __init__(self,elem): 3 #elem指数据元素 4 self.elem = elem 5 #指向下一个节点的链接域 6 self.next = None 7 #构造单向链表类 8 class singleLinkList: 9 #初始化方法 10 def __init__(self,node=Node): 11 #判断node是否为空 12 if node != None: 13 headNode = Node(node) 14 self.__head = headNode 15 else: 16 self.__head = node #私有属性 17 18 #在头部添加元素 19 def add(self,item): 20 #将传入的值构造成节点 21 node = Node(item) 22 #将新节点的链接域next指向头节点 23 node.next = self.__head 24 #将链表的头__head指向新节点 25 self.__head = node 26 27 #在单向链表尾部追加元素 28 def append(self,item): 29 #将传入的值构造成节点 30 node = Node(item) 31 if self.is_empty(): 32 self.__head = node 33 else: #单链表不为空 34 curNode = self.__head 35 while curNode.next != None: 36 curNode = curNode.next 37 #修改节点指向,最后一个节点的next指向node 38 curNode.next = node 39 40 #在指定位置添加元素 41 def insert(self,pos,item): 42 #如果传入的pos是小于等于0的数,默认的插入头部 43 if pos <= 0: 44 self.add(item) 45 #如果pos的值大于链表长度,直接插入到尾部 46 elif pos > (self.length()-1): 47 self.append(item) 48 else: 49 #构造节点 50 node = Node(item) 51 count = 0 52 preNode = self.__head 53 while count < (pos-1): #**寻找前一个节点 54 count += 1 55 preNode = preNode.next 56 #修改指向 57 #将前一个节点的next指向插入位置节点 58 node.next = preNode.next 59 #将插入位置的前一个节点的next指向新节点 60 preNode.next = node 61 62 63 #删除节点 64 def remove(self,item): 65 curNode = self.__head 66 preNode = None 67 while curNode != None: 68 if curNode.elem == item: 69 #判断是否是头节点 70 if preNode == None:#是头节点 71 self.__head = curNode.next 72 else: 73 preNode.next = curNode.next 74 break #否则会出现死循环 75 else: 76 preNode = curNode 77 curNode = curNode.next 78 79 #查找节点是否存在 80 def search(self,item): 81 curNode = self.__head 82 while curNode != None: 83 if curNode.elem == item: 84 return True 85 curNode = curNode.next 86 return False 87 88 #判断单向链表是否为空 89 def is_empty(self): 90 #判断head指向是None,如果是None则是空链表 91 #if self.__head == None: 92 # return True 93 #else: 94 # return False 95 return self.__head == None 96 97 #计算单向链表的长度 98 def length(self): 99 count = 0 100 curNode = self.__head 101 while curNode != None: 102 count += 1 103 curNode = curNode.next 104 return count 105 def travel(self): 106 curNode = self.__head 107 while curNode != None: 108 print(curNode.elem,end='\t') 109 curNode = curNode.next 110 print('') 111 if __name__ == '__main__': 112 #初始化元素值为20的单向链表 113 singleLinkList = singleLinkList(20) 114 #初始化一个空的链表 115 #singleLinkList = singleLinkList() 116 print('是否是空列表:',singleLinkList.is_empty()) 117 #print('链表的长度为:',singleLinkList.length()) 118 print('--------------遍历单链表-------------') 119 singleLinkList.travel() 120 print('-----------------查找----------------') 121 print(singleLinkList.search(20)) 122 #print(singleLinkList.search(30)) 123 print('---------------头部插入--------------') 124 singleLinkList.add(1) 125 singleLinkList.add(2) 126 singleLinkList.add(3) 127 singleLinkList.travel() 128 print('--------------尾部追加--------------') 129 singleLinkList.append(10) 130 singleLinkList.append(30) 131 singleLinkList.append(40) 132 singleLinkList.travel() 133 print('链表的长度为:',singleLinkList.length()) 134 print('-------------指定位置插入------------') 135 singleLinkList.insert(2,100) 136 singleLinkList.travel() 137 singleLinkList.insert(0,200) 138 singleLinkList.travel() 139 singleLinkList.insert(100,300) 140 singleLinkList.travel() 141 print('-------------- 删除节点---------------') 142 singleLinkList.remove(200) 143 singleLinkList.travel() 144 singleLinkList.remove(300) 145 singleLinkList.travel()
1 是否是空列表: False 2 --------------遍历单链表------------- 3 20 4 -----------------查找---------------- 5 True 6 ---------------头部插入-------------- 7 3 2 1 20 8 --------------尾部追加-------------- 9 3 2 1 20 10 30 40 10 链表的长度为: 7 11 -------------指定位置插入------------ 12 3 2 100 1 20 10 30 40 13 200 3 2 100 1 20 10 30 40 14 200 3 2 100 1 20 10 30 40 300 15 -------------- 删除节点--------------- 16 3 2 100 1 20 10 30 40 300 17 3 2 100 1 20 10 30 40
正是江南好风景