1025 反转链表 (25分)
输入样例:
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⃣️不是所有结点都是在链表上;2⃣️反转后链表中每个结点的next仍指向反转后的下一个结点,一定要审题!
- 第5个测试点超时,python本身的效率是一方面,代码可能还有优化的空间,但是没有必要,既然选择使用python说明对效率要求不是特别高,也可以把python代码过分优化,就失去了代码的优雅性。针对pat的题目而言,绝大部分用python没有问题,对于部分超时问题,请把python代码用c++或者c翻译一遍就没问题;
- 每次做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分)相关推荐
- PAT乙级1025反转链表 25(分)
1025 反转链表 (25 分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为3→2→1→6→5→ ...
- PAT | 1025 反转链表 (25分)【超时问题 + 柳神代码】
1025 反转链表 (25分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→ ...
- 1025 反转链表 (25 分)
1025 反转链表 (25 分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5 ...
- 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 ...
- 【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,则输出应该 ...
- 1025 反转链表 (25 分)(c语言)
给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4:如果 K 为 4,则输出应该 ...
- 1025 反转链表 (25分)(最详细最简便)(套路模板)
立志用更少的代码做更高效的表达 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→ ...
- 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,则输 ...
- 【PAT乙级】1025 反转链表 (25 分)
题目地址 最后一个测试点:不是所有的点都是合法的,有的结点地址是负数. #include<cstdio> #include<iostream> #include<map& ...
最新文章
- 希尔排序python实现
- linux (ubuntu)安装pycharm
- PHP - 如何解决中文乱码
- 训练自己的数据_PyTorch版CenterNet训练自己的数据集
- DLLHijack漏洞原理
- JavaScript——模块化的历史进程梳理
- QT5.3.2与VS2013 fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突_(解决方案)...
- 封装ajaxGetJs
- java怎么跳出下列,在JAVA中,如何跳出当前的多重嵌套循环?
- win10 3dmax 激活后反复激活和激活码无效问题
- 涡CFTurbo 10.2.6 2017泵轮涡旋式机械设计
- 写博客的第二天——来个水题,17倍
- 2022年最新美股上市SaaS公司前50名排行榜单
- 会员权益营销中,设置会员权益的三个标准
- java.Net.UnknownHostException异常处理的方法
- l7sa008b故障代码_美国凯利冷机故障码表
- 关于gp和mysql的两点区别
- 企业微信SCRM的设计理念是什么?和CRM有什么不同?
- 【历史上的今天】2 月 2 日:公钥密码学发明者诞生;苹果的衰落期;测谎仪首次被使用
- Win10年度更新准RTM版推送 免费升级仅剩4天
热门文章
- 前端学习(1297):第三方模块gulp
- 前端学习(1117):严格模式的变化
- 前端学习(239):渐进增强和优雅降级
- mysql + keepalived高可用
- 基于密度的异常值检测方法整理
- C与C++中的extern与static、extern C与__cplusplus的作用
- StatusCodeError: 400 - “{\“code\“:40000,\“error\“:\“错误 Error: 登录用户不是该小程序的开发者
- 同方知网软件_国产精品软件天若OCR:支持图像识别/自动翻译/公式识别等
- 笔记本电脑摄像头不能用_聊一款想代替笔记本电脑的产品
- NCoreCoder.Aop详解