# 节点类 class Node: def __init__(self, data, next=None): self.data = data self.next = next def __str__(self): return str(self.data) # 链表类 class LinkedList: def __init__(self): self.head = None self.length = 0 # 链表尾部append数据 def append(self, data): node = Node(data) if self.head is None: # head 未空,则此时链表为空,直接将新节点赋给self.head self.head = node else: # head 不为空 current = self.head index = 0 while current.next: # 当前元素的下个元素是否为空 current = current.next current.next = node self.length += 1 # 某一位置插入节点 def insert(self, pos, data): if pos < 0 or pos > self.length: raise IndexError new_node = Node(data) # 创建新的节点 # pos 为 0时 if pos == 0: # 插入到第一个位置,因为有head所以需要单独处理 new_node.next = self.head self.head = new_node self.length += 1 return # pos不为0时 count = 0 # 记录遍历过的节点数 previous = None # 当前节点的前一个节点 current = self.head # 当前节点,从第一个节点开始遍历,所以默认为head while count < pos: # 遍历到pos的前一个节点 count += 1 previous = current current = current.next previous.next = new_node # 循环结束后,将新的节点赋给previous.next new_node.next = current # 将当前节点赋给 new_node.next self.length += 1 # integer -- return first index of value. def index(self, value) -> int: index = 0 current = self.head while current: if current.data == value: return index current = current.next index += 1 return -1 # index -> value def valueof(self, index): count = 0 current = self.head while current: if index == count: return current.data current = current.next count += 1 return '' # 移除某一个节点 def remove(self, value): current = self.head previous = None index = 0 # 分两种情况 1、移除的节点是第一个节点(index=0), 2、移除的节点不是第一个节点(index !=0) while current: if current.data == value: print('remove') if index == 0: self.head = current.next else: previous.next = current.next return previous = current current = current.next def update(self, index, new_value): current = self.head count = 0 while current: if index == count: current.data = new_value return current.data current = current.data def __str__(self): tostr = 'LinkedList { ' current = self.head while current: tostr = tostr + str(current) + " " current = current.next return tostr + '}' # 测试代码 linklist = LinkedList() linklist.append('1') linklist.append('2') linklist.append('3') linklist.append('4') linklist.append('5') linklist.insert(0, 'a') print(linklist) print(linklist.length) print(linklist.index('3')) print(linklist.valueof(1)) print(linklist) linklist.remove('a') print(linklist) print(linklist.update(0, 'b')) print(linklist) print(linklist.update(0, 'c')) print(linklist)
来源:https://www.cnblogs.com/yaoqingzhuan/p/12213687.html