PAT1 1052 Linked List Sorting

题目链接
我的github

题目大意

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

输入

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

输出

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

样例输入

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值