PAT1 1052 Linked List Sorting

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LSC_333/article/details/91356270

题目链接
我的github

题目大意

给一个链表的信息和链表的第一个节点的地址,要求将这个链表排序

输入

第一行给出链表的节点个数 N < 1 0 5 N<10^5 和第一个节点的地址,所有节点的地址都是一个长度为5的正整数。空用-1表示
之后有 N N 行,每行表示一个节点的信息Address Key Next,分别表示节点的地址,值,下一个节点的地址
值的范围在 [ 1 0 5 , 1 0 5 ] [-10^5, 10^5] ,保证每个节点的值都不相同,且没有环

输出

对每个样例,以输入的格式输出排序后的链表

样例输入

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++吧。。。解法一样就行

猜你喜欢

转载自blog.csdn.net/LSC_333/article/details/91356270
今日推荐