AcWing 1538. 链表排序
原题链接
简单
作者:
aac
,
2024-11-22 16:06:55
,
所有人可见
,
阅读 1
e = {};ne = {} # 由于地址为字符串,所以要用字典来存
n,h = input().split()
for i in range(int(n)):
addr,key,_next = input().split()
key = int(key)
e[addr] = key
ne[addr] = _next
infos = []
i = h
while i != '-1':
# infos.append([i,e[i],ne[i]]) 由于后面要重排链表,所以节点的指向会发生变化,所以不用添加ne[i]
infos.append([i,e[i]])
i = ne[i]
# 按照Key的大小来重排链表
infos.sort(key=lambda x : x[1])
"""
最好不要这么写,如果infos有1个元素,那么infos[i + 1]直接下标越界
for i in range(len(infos)):
infos[i].append(infos[i + 1][0])
if i == len(infos) - 2:
infos[i + 1].append("-1")
break
"""
# 为重排后的链表添加地址值
for i in range(len(infos)):
if i == len(infos) - 1:
infos[i].append("-1")
else:
infos[i].append(infos[i + 1][0])
if len(infos) == 0: # 必须要做这个判断,否则链表为空时,则info[0][0]访问就越界了
print(0,-1)
else:
print(len(infos),infos[0][0])
for info in infos:
print(*info)