版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LSC_333/article/details/91356270
题目大意
给一个链表的信息和链表的第一个节点的地址,要求将这个链表排序
输入
第一行给出链表的节点个数
和第一个节点的地址,所有节点的地址都是一个长度为5的正整数。空用-1表示
之后有
行,每行表示一个节点的信息Address Key Next
,分别表示节点的地址,值,下一个节点的地址
值的范围在
,保证每个节点的值都不相同,且没有环
输出
对每个样例,以输入的格式输出排序后的链表
样例输入
5 00001
11111 100 -1
00001 0 22222
33333 100000 11111
12345 -1 33333
22222 1000 12345
样例输出
5 12345
12345 -1 00001
00001 0 11111
11111 100 22222
22222 1000 33333
33333 100000 -1
解析
这个题要注意有些节点可能不在链表中,需要将这些链表剔除。
然后,在我提交这个题的时候发生了很奇怪的一件事。
我第一次提交的时候,结果告诉我最后第二个测试点超时,我修改一下之后刚好400msAC
但是我再次提交的时候却又告诉我超时,有点迷。。。
这就是我既400ms刚好AC又说我倒数第二个测试点超时的神奇代码:
# -*- coding: utf-8 -*-
# @Time : 2019/6/9 18:01
# @Author : ValarMorghulis
# @File : 1052.py
def solve():
nodes = list()
dic = dict()
n, head = map(int, input().split())
for i in range(n):
address, key, nex = map(int, input().split())
dic[address] = [key, nex]
while head != -1:
nodes.append([head, dic[head][0]])
head = dic[head][1]
nodes = sorted(nodes, key=lambda x: x[1])
if len(nodes)==0:
print("0 -1")
else:
print("%d %05d" % (len(nodes), nodes[0][0]))
for i in range(len(nodes)):
print("%05d %d" % (nodes[i][0], nodes[i][1]), end=' ')
if i == len(nodes) - 1:
print("-1")
else:
print("%05d" % nodes[i + 1][0])
nodes = sorted(nodes, key=lambda x: x[1])
if __name__ == "__main__":
solve()
想要绝对过就用C++吧。。。解法一样就行