PAT (Basic Level)1025. 反转链表

【C++】PAT(basic level)1025. 反转链表 (25) 1025. 反转链表 (25) 时间限制 300 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→ 阅读详情

http://www.patest.cn/contests/pat-b-practise/1025

题目描述:

给定一个常数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→6,即最后不到K个元素不反转。

输入格式:

每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址、结点总个数正整数N(<= 105)、以及正整数K(<=N),即要求反转的子链结点的个数。结点的地址是5位非负整数,NULL地址用-1表示。

接下来有N行,每行格式为:

Address Data Next

其中Address是结点地址,Data是该结点保存的整数数据,Next是下一结点的地址。

输出格式:

对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。

输入样例:
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
唉呀妈呀,这题整了一晚上。由于地址是五位整数格式,所以,我们可以开一个很大的数组,以空间换时间。地址的值就是该节点在数组中的索引。然后我是增加了一个previous node属性,便于count计数到K,也就是要反转的链末时,可以回溯。这样,只需要O(n)的时间。但是要注意输出中的next值是要改成反转后链的下一个节点的地址,尤其是注意每一段的最后一个地址。


#include <iostream>
#include <string>
#include <algorithm> 
#include <cmath>
#include <iomanip>
#include <ctype.h>
using namespace std;

#define max 100000

struct node {
	int addr ;
	int data ;
	int next ;
	int pre ;
};

node nodes[max] ;

string intout (int n)
{
	if (n==-1) return "-1";
	string s = "";
	for (int i = 10000 ; i>=10 ; i/=10)
	{
		char ch = n/i+'0' ;
		n %= i ;
		s += ch ;
	}
	char ch = n+'0' ;
	s += ch ;
	return s;
}

int main()
{
	int head = 0 ;
	int K = 0, N = 0;
	cin >> head >> N >> K ;
	while (N--){
		int ad = 0 ;
		cin >> ad ;
		nodes[ad].addr = ad ;
		cin >> nodes[ad].data >> nodes[ad].next ;
	}
	
	int current = head ;
	int nextAd = -1;
	int count = 1 ;
	int tail = head ;
	bool flag = 0;
	while ( current != -1)
	{
		if (count == K)//need to return
		{
			tail = nodes[current].next ;
			int temp = current ;
			if (flag==1) printf ("%s\n", intout(current).c_str()) ;
			while (count)
			{
				if (count==1 )
				{
					flag = 1;
					printf ("%s %d ", intout(nodes[temp].addr).c_str(), nodes[temp].data) ;
				 } 
				else printf ("%s %d %s\n", intout(nodes[temp].addr).c_str(), nodes[temp].data, intout(nodes[temp].pre).c_str()) ;
				temp =  nodes[temp].pre ;
				count--;
			}
		}
		nextAd = nodes[current].next ;
		if (nextAd != -1) nodes[nextAd].pre = current ;
		current = nextAd ;
		count ++ ;
	}
	printf("%s\n" , intout(tail).c_str());
	while (tail != -1)
	{
		printf ("%s %d %s\n", intout(nodes[tail].addr).c_str(), nodes[tail].data, intout(nodes[tail].next).c_str()) ;
		tail = nodes[tail].next ;
	} 
	if (head == -1) printf("-1");
	
	return 0;
}

/*
1 8 3
1 2 2
2 4 3
3 5 4
4 3 5
5 5 6
6 6 7
7 7 8
8 8 -1

*/


1025 反转链表【PAT (Basic Level) Practice (中文)】 - 知识点: - 数据结构与算法/线性结构/链表 - 方法技巧: - 链表的数组实现 阅读详情

相关推荐

USB-C快充协议分析仪:QC/PD双协议识别与功率监测设计

USB-C快充协议是现代移动设备能量传输的核心技术标准,其本质是通过物理层电压特征(如DP/DM组合、CC线BMC编码)实现动态电压协商。理解协议握手原理对充电器研发、兼容性测试及故障诊断至关重要。本方案聚焦受电端(Sink)视角,基于FUSB302B与高阻抗DP/DM采样电路,实现QC2.0/QC3.0/QC4+与PD2.0/PD3.0的实时识别与状态机解析;结合INA219高精度电流检测与μs级同步采样,达成±0.06%功率测量精度。典型应用于快充芯片验证、产线协议一致性测试及第三方评测,为USB供电系

weixin_42153793的博客 245

PAT Basic Level 1025. 反转链表(25)

【来源】 1025. 翻转链表(25) 【分析】 题目给出一系列链表的节点,要求将链表中每K个节点翻转。最后不到K个元素不反转。 和本题类似的题目有:Advanced Level 中的 1052. Linked List Sorting (25),处理的思路是一样的。 对这种地址空间较小的题目,通用的做法是开一个大一点的Vector,然后把Vector的index映射为节点的地址。这样处

harmony的专栏 2654

DTW Barycenter Averaging(DBA)——平均序列求法

DBA该算法是用来求序列数据集SS的一致序列(平均序列)。由Franc-ois Petitjean提出的。目前,该方法求得的平均序列是最准确的。 假设一元组为S={s1,s2,⋯,sn}S={s1,s2,\cdots,sn},当SS中的元素为实数时,很容易求的SS的平均值: avg=s1+s2+⋯+snn(1) avg = \dfrac{s1 +s2+\cdots+sn}{n} \qquad\q

光怪陆离 1万+

1025. 反转链表 (25)

1025. 反转链表 (25)给定一个常数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→6,即最后不到K个元素不反转。输入格式:每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址、结点总个数正整数N(<= 105)、以及正整数K(<=N),即要求反转的子链

小羊哈利 610

From Manual to Magic: How nnU-Net is Revolutionizing Biomedical Image Segmentation Without Human Int

本文探讨了nnU-Net如何通过全自动深度学习技术革新生物医学图像分割领域。作为自我配置的智能系统,nnU-Net无需人工干预即可完成从数据预处理到模型训练的全流程,显著提升医学影像分割的效率和精度,尤其在CT和MRI影像分析中表现卓越。

metal的博客 1084

电力电子技术(13)——大功率可控整流电路

目录引言2.6.1 带平衡电抗器的双反星形可控整流电路电路结构的特点接平衡电抗器的原因平衡电抗器使得两组三相半波整流电路同时导电的原理分析谐波分析2.6.2 多重化整流电路概述原理目标1)移相多重联结2)多重联结电路的顺序控制3重晶闸管整流桥顺序控制带平衡电抗器的双反星形可控整流电路(是多重化整流电路的重要形式之一)的特点:适用于低电压、大电流的场合。多重化整流电路的特点:绕组的极性相反的目的:消除直流磁通势如图所示,虽然两组相电流的瞬时值不同,但是平均电流相等而绕组的极性相反,所以直流安匝(电流*匝数)互

weixin_45589295的博客 1万+

PAT 1074. Reversing Linked List

按每单元k个结点,反转链表

Stephen Wong的专栏 1473

彻底卸载Ubuntu双系统,并完美回收100G空间给D盘

本文记录了安全卸载Ubuntu双系统并回收磁盘空间的全过程。作者首先通过Windows命令行彻底清除Ubuntu启动项,避免GRUB引导报错;随后在磁盘管理中删除Linux分区,将100G未分配空间合并至相邻的D盘。针对C盘空间不足问题,作者采用Dism++清理系统文件,并将用户文档、聊天记录等迁移至扩容后的D盘。最终实现了引导纯净、空间合理分配的目标,特别强调分区扩展必须遵循"相邻原则",建议通过间接迁移而非直接扩容来优化系统盘空间管理。

2403_85993278的博客 1512

【PAT】1025 反转链表(25)basic

/* 1.设¦¨¨置?录?入¨?的Ì?vector足Á?够?大䨮,ê?直¡À接¨®把ã?vector的Ì?index与®?节¨²点Ì?的Ì?address匹£¤配?,ê?这a在¨²节¨²点Ì?数ºy很¨¹少¦¨´的Ì?情¨¦况?下?可¨¦用®?;ê? 2.从䨮给?定¡§头ª¡¤结¨¢点Ì?指?针?开a始º?,ê?顺3序¨°找¨°到Ì?整?个?链¢¡ä,ê?存ä?储ä¡é在¨²vsort

csf的专栏 3055

采用MPU6050的手势遥控器

随着社会的发展与进步,电子产品日益更新,个人家庭迎来了越来越多的智能家电。然而,现在的智能电子设备产品的遥控器多数都是按键形的。操作繁琐不直观,学习成本大。并且对于有老人小孩的家庭,给他们的操作带来了巨大的障碍。手势遥控器是指利用简单的手势来指挥电子设备,获得便捷的操作体验。让家庭成员都可以享受科技发展带来的福利。MPU6050是一个运动传感器,内置陀螺仪,再由电子设备利用判断结果做出相应的响应即...

Sakura的博客小站 6602

告别示教器!用C#和ABB PC SDK 6.08打造你的第一个Windows机器人控制台(附完整连接代码)

本文详细介绍了如何使用C#和ABB PC SDK 6.08开发Windows机器人控制台应用,实现无示教器的机器人控制。从环境配置、SDK引用到机器人发现、连接及状态监控,提供了完整的代码示例和架构设计建议,帮助开发者快速掌握上位机控制技术。

weixin_29758911的博客 323

1025 反转链表 (25 分)

1025反转链表(25分) 给定一个常数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→6,即最后不到K个元素不反转。 输入格式: 每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数...

韩旭051的博客 3671

【地图模块算法】二维全局地图的开源方案及对比--gmapping、hector、karto、cartographer

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、gmapping算法建图【基于Raoo-Blackwellized粒子滤波(RBPF)算法】1.gmapping理论(1)gmapping的工作原理(2)gmapping的算法流程(3)gmapping论文理论2.gmappingROS工程框架解析(1)gmapping的功能包架构(2)gmapping订阅和发布的话题(3)gmapping算法建图参数(4)gmapping源码

qq_35635374的博客 3437

PAT (Basic Level) Practice 1025 反转链表

PAT刷题记录分享 - PAT1025

KaiYingLi的博客 431

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

PAT (Basic Level) Practice-1025 反转链表

给定一个常数 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→6,即最后不到 K 个元素不反转。

weixin_53895027的博客 304

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Pat(Basic Level)Practice--1025(反转链表)

Pat1025代码 题目描述: 给定一个常数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→6,即最后不到K个元素不反转。 输入格式: 每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址、结点总个数正整数N(5)、以及正整数K(

奋起的Coder。。。 2499

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【PAT (Basic Level) Practice】——【链表处理】1025 反转链表

文章目录一【题目难度】二【题目编号】三【题目描述】四【题目示例】五【解题思路】六【最终得分】七【代码实现】八【提交结果】 一【题目难度】 乙级 二【题目编号】 1025 反转链表 (25 分) 三【题目描述】 给定一个常数 KKK 以及一个单链表 LLL,请编写程序将 LLL 中每 KKK 个结点反转。例如:给定 LLL 为 1→2→3→4→5→6,KKK 为 3,则输出应该为 3→2→1→6→5→4;如果 KKK 为 4,则输出应该为 4→3→2→1→5→6,即最后不到 KKK 个元素不反转。

IronmanJay 1141

PAT (Basic Level) Practice 1025 反转链表

                                          1025 反转链表 给定一个常数 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→6,即最后不到 K 个元素不反转。 输入格式: 每个输入包含 1 ...

Dunk.Wan 283

PAT (Basic Level) 1025 反转链表

题意 给出若干个结点的地址、数据和下一个结点地址,每隔K个对链表进行反转,求最后的链表。 思路 先拿map存纯数据,顺序搜索出整个链表,放入vector,每隔K个进行reverse即可。 代码 #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie...

abcdefbrhdb的博客 412

PAT basic-level 1025 反转链表 笔记

1025. 反转链表 (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个常数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→6,即最后不到K个元素

Triumphs的博客 508

PAT (Basic Level) Practice (中文) 1025 反转链表

题目链接 #include<stdio.h> int main() { int a,b,c,d[100000][3],e,f,n; scanf("%d %d %d",&a,&n,&b); for(e=0;e<n;e++) scanf("%d %d %d",&d[e][0],&d[e][1],&d[...

qwjy的博客 457

PAT(Basic level)Practice 1025 反转链表 题解

1025 反转链表 (25 分) 给定一个常数 KKK 以及一个单链表 LLL,请编写程序将 LLL 中每 KKK 个结点反转。例如:给定 LLL 为 1→2→3→4→5→6,KKK 为 3,则输出应该为 3→2→1→6→5→4;如果 KKK 为 4,则输出应该为 4→3→2→1→5→6,即最后不到 KKK 个元素不反转。 输入格式: 每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1...

masteren的博客 307

PAT (Basic Level) Practice1025 反转链表

1025 反转链表 : 给定一个常数 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→6,即最后不到 K 个元素不反转。

PKM of bk 473

PAT Basic Level 1025 反转链表 解题思路及AC代码

强调指针的抽象概念 + 链表操控的代码实现

thexiaosi的博客 176
上一篇: PAT (Basic Level)1024. 科学计数法
下一篇: PAT (Basic Level)1026. 程序运行时间
sipprince
博客等级 码龄14年 19粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值