题解 | 【模板】链表
【模板】链表
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()

