刚学不久派森
跟着视频教程刚学没多久自己写的链表方法,请大神给指点下哪里需要改
很多地方没写返回值,没抛出异常,只是写的打印提示
程序代码:
class Node: def __init__(self,value,next = None): self.value = value self.next = next class LinkList: """ 链表操作: 增,删,改,查,排 """ def __init__(self): # 链表初始化 self.head = Node(None) print("链表初始化成功") def init_list(self,merge): # 给链表装载数据 """ 给链表挂接数据 """ p = self.head i = 0 for item in merge: p.next = Node(item) p = p.next i += 1 print("链表成功装载%d个数据"%i) def get_len(self): # 获取链表的长度 """ 获取链表的长度 return:返回链表节点数 """ p = self.head.next index = 1 while p.next: p = p.next index += 1 return index def show_list(self): # 遍历打印链表中所有节点的值 """ 遍历链表,显示每个节点的值 """ p = self.head.next while p: print(p.value,end=" ") p= p.next print() print("-----------------") def is_empty(self): # 判断链表是否为空 """ 判断链表是否为空 True:有数据 False:无数据 """ if self.head.next: return True else: return False def clear(self): # 清空链表 """ 链表清空 """ self.head.next = None print("链表已经清空!") def append(self,val): # 链表尾部增加数据 """ 链表尾部增加节点数据 val:要增加的值 """ p = self.head while p.next: p = p.next p.next = Node(val) def apptop(self, val): # 链表头部增加数据 """ 链表头部增加节点数据 val:要增加的值 """ t = Node(val) t.next = self.head.next self.head.next = t def insert(self, val, index): # 链表中间增加数据 """ 链表中间插入的值,如果节点索引超出范围,将插入到链表末尾 val:要插入的值 index:要插入的节点索引(索引从0开始) """ p = self.head item = 0 if index >= 0: while item != index and p != None: item +=1 p = p.next if p == None: print("节点'%d'超出了链表的节点范围,所以插入到链表末尾"%index) self.append(val) return t = Node(val) t.next = p.next p.next = t print("节点'%d'为负值,所以插入到链表头部" % index) self.apptop(val) # print("节点'%d'成功插入目标值:"%index,val) def remove(self, val): # 删除链表中的某个值 """ 删除链表中的值 val:要删除的值 return:返回删除值对应的节点索引 """ p = self.head while p.next: if p.next.value == val: p.next = p.next.next print("成功删除目标值:",val) p = p.next print("你要操作的值并不在链表中") def delete(self,index): # 删除链表中某个节点 """ 删除链表中某个节点 index:要删除的节点索引 return:返回删除的值 """ p = self.head i = 0 while p: if i == index: temp_value = p.next.value # print("成功删除节点'%d'的值:"%index, p.next.value) p.next = p.next.next return temp_value i += 1 p = p.next print("你要操作的节点并不在链表中") return None def get_value(self, index): # 获取某个节点对应的值 """ 获取节点值 index:节点索引,从0开始 return:返回节点对应的值 """ if index >= 0: p = self.head.next i = 0 while p.next: if i == index: return p.value p = p.next i += 1 return p.value def get_index(self,val): # 获取某个值对应的节点 """ 查找某个值对应的节点索引, val:要查找的值 return:返回节点索引index,找到一个就返回 """ p = self.head.next index = 0 while p: if p.value == val: print(val, "对应的节点索引为:", index) return index index += 1 p = p.next print(val,"并不在链表中") def update(self,index,val): # 更改某个节点的值 """ 更改某个节点的值 index:节点索引 """ if index >= 0: p = self.head.next i = 0 while p: if i == index: p.value = val print("节点'%d'对应的值更新为:"%index,val) return i += 1 p = p.next print("超出了链表的节点范围,更新失败") def move(self, index_1, index_2): # 节点1移动到节点2 """ 节点1到移动节点2,如果节点2超出范围,将移动到链表末尾 index_1:待移动的节点索引[目标节点索引] index_2:欲移动到的节点索引[目的节点索引] """ index = self.get_len() if index > index_1 >= 0: if index > index_2 >= 0: temp_value = self.delete(index_1) self.insert(temp_value, index_2) else: print("第2个节点超出了链表的范围,所以移动失败") return else: print("第1个节点超出了链表的范围,所以移动失败") return def reversal(self): # 链表反转 """ 链表反转 """ p = self.head.next # 先把链表头部后面的数据存到p self.head.next = None # 把链表清空 if p: while p: # 循环取p里的数据添加到空链表的0位置 self.apptop(p.value) p = p.next return print("空链表,无需反转") def order_up(self): # 链表升序 """ 链表升序 """ p = self.head.next index = self.get_len() for i in range(index): for x in range(i+1, index): if self.get_value(i) >= self.get_value(x): self.move(x, i) def order_down(self): # 链表降序 """ 链表降序 """ self.order_up() self.reversal() def to_list(self): # 链表到列表转换 """ 链表到列表转换 return:返回列表 """ list_my = [] p = self.head.next while p: list_my.append(p.value) p = p.next return list_my # 测试代码 if __name__ == "__main__": list01 = [3,22,8,7,32,14,48,3,1] link01 = LinkList() link01.init_list(list01) link01.show_list() link01.reversal() link01.show_list() link01.get_len()
[此贴子已经被作者于2023-3-10 12:17编辑过]