输入样例:

00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
输出样例:

00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1

解题心得:

  1. 本题两个注意点,1⃣️不是所有结点都是在链表上;2⃣️反转后链表中每个结点的next仍指向反转后的下一个结点,一定要审题!
  2. 第5个测试点超时,python本身的效率是一方面,代码可能还有优化的空间,但是没有必要,既然选择使用python说明对效率要求不是特别高,也可以把python代码过分优化,就失去了代码的优雅性。针对pat的题目而言,绝大部分用python没有问题,对于部分超时问题,请把python代码用c++或者c翻译一遍就没问题;
  3. 每次做pat提交错误时,都是无从下手->然大悟->原来如此->如此简单。
# -*- coding: utf-8 -*-
import sys
from collections import defaultdictdef get_k_reverse(first_addr, nodes, k):addr = first_addrsorted_nodes = []while addr != '-1':sorted_nodes.append(nodes[addr])addr = nodes[addr][2]# print('debug:', sorted_nodes)i = 0n = len(sorted_nodes)loops = n // kwhile i < loops:for j in reversed(range(i * k, (i + 1) * k)):print(' '.join(sorted_nodes[j][0:2]), end=' ')if j - 1 >= i * k:print(sorted_nodes[j - 1][0])elif i + 1 < loops:print(sorted_nodes[(i + 2) * k - 1][0])elif i + 1 == loops and (i + 1) * k < n:print(sorted_nodes[(i + 1) * k][0])else:print('-1')i += 1for j in range(i * k, n):print(' '.join(sorted_nodes[j][0:2]), end=' ')if j + 1 < n:print(sorted_nodes[j + 1][0])else:print('-1')if __name__ == '__main__':first_addr, n, k = sys.stdin.readline().split()n = int(n)k = int(k)nodes = defaultdict(list)for i in range(n):node = sys.stdin.readline().split()nodes[node[0]] = nodeget_k_reverse(first_addr, nodes, k)

1025 反转链表 (25分)相关推荐

  1. PAT乙级1025反转链表 25(分)

    1025 反转链表 (25 分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为3→2→1→6→5→ ...

  2. PAT | 1025 反转链表 (25分)【超时问题 + 柳神代码】

    1025 反转链表 (25分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→ ...

  3. 1025 反转链表 (25 分)

    1025 反转链表 (25 分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5 ...

  4. c语言最大字符1025,1025 反转链表 (25 分)C语言

    题目描述 给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转.例如:给定L为1→2→3→4→5→6,K为3,则输出应该为 3→2→1→6→5→4:如果K为4,则输出应该为4→3→2→1→5 ...

  5. 【PAT (Basic Level) 】1025 反转链表 (25 分)

    给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4:如果 K 为 4,则输出应该 ...

  6. 1025 反转链表 (25 分)(c语言)

    给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4:如果 K 为 4,则输出应该 ...

  7. 1025 反转链表 (25分)(最详细最简便)(套路模板)

    立志用更少的代码做更高效的表达 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→ ...

  8. PAT乙级|C语言|1025 反转链表 (25分)

    题目 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4:如果 K 为 4,则输 ...

  9. 【PAT乙级】1025 反转链表 (25 分)

    题目地址 最后一个测试点:不是所有的点都是合法的,有的结点地址是负数. #include<cstdio> #include<iostream> #include<map& ...

最新文章

  1. 希尔排序python实现
  2. linux (ubuntu)安装pycharm
  3. PHP - 如何解决中文乱码
  4. 训练自己的数据_PyTorch版CenterNet训练自己的数据集
  5. DLLHijack漏洞原理
  6. JavaScript——模块化的历史进程梳理
  7. QT5.3.2与VS2013 fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突_(解决方案)...
  8. 封装ajaxGetJs
  9. java怎么跳出下列,在JAVA中,如何跳出当前的多重嵌套循环?
  10. win10 3dmax 激活后反复激活和激活码无效问题
  11. 涡CFTurbo 10.2.6 2017泵轮涡旋式机械设计
  12. 写博客的第二天——来个水题,17倍
  13. 2022年最新美股上市SaaS公司前50名排行榜单
  14. 会员权益营销中,设置会员权益的三个标准
  15. java.Net.UnknownHostException异常处理的方法
  16. l7sa008b故障代码_美国凯利冷机故障码表
  17. 关于gp和mysql的两点区别
  18. 企业微信SCRM的设计理念是什么?和CRM有什么不同?
  19. 【历史上的今天】2 月 2 日:公钥密码学发明者诞生;苹果的衰落期;测谎仪首次被使用
  20. Win10年度更新准RTM版推送 免费升级仅剩4天

热门文章

  1. 前端学习(1297):第三方模块gulp
  2. 前端学习(1117):严格模式的变化
  3. 前端学习(239):渐进增强和优雅降级
  4. mysql + keepalived高可用
  5. 基于密度的异常值检测方法整理
  6. C与C++中的extern与static、extern C与__cplusplus的作用
  7. StatusCodeError: 400 - “{\“code\“:40000,\“error\“:\“错误 Error: 登录用户不是该小程序的开发者
  8. 同方知网软件_国产精品软件天若OCR:支持图像识别/自动翻译/公式识别等
  9. 笔记本电脑摄像头不能用_聊一款想代替笔记本电脑的产品
  10. NCoreCoder.Aop详解