题解 | 【模板】链表
【模板】链表
https://www.nowcoder.com/practice/97dc1ac2311046618fd19960041e3c6f
import sys class Node(): """ 链表节点类 """ def __init__(self,data): self.data = data self.next = None class Linklist: #链表类 def __init__(self): """ item 一位数组,存放改链表的数组 """ self.len=0 self.head = None self.last=None ''' item=[] self.len=len(item) if self.len<=0: return i=0 self.head=Node(item[i]) self.last=self.head i+=1###此句不能少 while i<self.len: self.last.next=Node(item[i]) self.last=self.last.next i+=1 ''' ''' def insert(self,data1,data2) : current = Node(self.head) node1=Node(data1) node2=Node(data2) if self.len==0: self.head=node2 self.last=node2 else: pre_node=Node(self.head) while current: if current.data == data1: data1.next.next=data2.next data1.next=data2 break pre_node=current current = current.next pre_node.next=data2 self.last=data2 self.len+=1 ''' def insert(self, data1, data2): node1 = Node(data1) node2 = Node(data2) if self.len == 0: self.head = node2 self.last = node2 else: current = self.head pre_node = None while current: if current.data == data1: node2.next = current if pre_node is None: self.head = node2 else: pre_node.next = node2 if current == self.last: self.last = node2 break pre_node = current current = current.next # 如果没有找到 data1,则将 node2 插入到链表末尾 else: pre_node.next = node2 self.last = node2 self.len += 1 def delete(self, data): # 如果链表为空,直接返回 if self.len ==0: return # 如果要删除的节点是头节点 if self.head.data == data: self.head = self.head.next if self.head is None: self.last = None self.len -= 1 return # 初始化前一个节点和当前节点 pre_node = self.head current_node = self.head.next # 遍历链表,寻找要删除的节点 while current_node is not None: if current_node.data == data: pre_node.next = current_node.next self.len -= 1 return pre_node = current_node current_node = current_node.next def isempty(self): if self.len==0: return True else: return False def output(self): p=self.head while p is not None: print(p.data,end=' ') p=p.next n=int(input()) linklist=Linklist() for line in sys.stdin: a = line.split() if a[0]=='insert': linklist.insert(int(a[1]),int(a[2])) elif a[0]=='delete': if linklist.isempty(): continue linklist.delete(int(a[1])) if linklist.isempty(): print("NULL") else: linklist.output()