链表基本操作
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/14950405.html
class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self): self.size = 0 self.head = None self.last = None def get(self, index): if index < 0 or index >= self.size: raise Exception("index out of bounds") p = self.head for i in range(index): p = p.next return p def insert(self, index, data): if index < 0 or index > self.size: raise Exception("index out of bounds") new_node = Node(data) if self.size == 0: # empty linked list self.head = new_node self.last = new_node elif index == 0: # insert from head new_node.next = self.head self.head = new_node elif self.size == index: # insert from tail self.last.next = new_node self.last = new_node else: # insert from middle prev_node = self.get(index - 1) new_node.next = prev_node.next prev_node.next = new_node self.size += 1 def remove(self, index): if index < 0 or index >= self.size: raise Exception("index out of bounds") if index == 0: # remove head removed_node = self.head self.head = self.head.next elif index == self.size - 1: # remove tail prev_node = self.get(index - 1) removed_node = prev_node.next prev_node.next = None self.last = prev_node else: # remove middle prev_node = self.get(index - 1) next_node = prev_node.next.next removed_node = prev_node.next prev_node.next = next_node self.size -= 1 return removed_node def output(self): p = self.head result = "" while p is not None: result += str(p.data) + "->" p = p.next return result.strip("->") linkedList = LinkedList() linkedList.insert(0, 1) linkedList.insert(0, 2) linkedList.insert(1, 3) linkedList.insert(2, 4) linkedList.insert(3, 5) linkedList.insert(4, 6) # 2->3->4->5->6->1 print(linkedList.output()) # 2 print(linkedList.get(0).data) # 4 print(linkedList.get(2).data) # 1 print(linkedList.get(5).data) linkedList.remove(0) linkedList.remove(1) # 3->5->6->1 print(linkedList.output())
强者自救 圣者渡人