PAT 乙级-1025 链表反转
来源:互联网 发布:java switch case用法 编辑:程序博客网 时间:2024/06/05 02:11
给定一个常数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
题目大意:题目给出一条n个节点的链表,以及一个整数k,要求将链表中每k个节点反转输出,剩余不足k个的节点顺序输出。
主要思路:此题用数组来存放链表的每个节点,每个节点包含地址,值,下一个地址,由于输入的节点并不是按顺序的,所以需要用一个数组接收所有的输入,然后根据首节点将所有节点按顺序放入一个新的数组(这里注意输入中可能会有无效的节点,所以链表长需要重新计算)。然后利用循环,在每个周期内倒序输出节点,除首节点外,每个节点需要输出两次自己的地址,第一次表示的是前一个节点的next。( 如果利用c++ algorithm头文件里面的reverse函数可以使代码更简单,对顺序放置链表的数组每k个节点进行倒置,然后通过一次遍历顺序输出所有节点)
#include <stdio.h>struct node {int ad;int val;int next;} node1[100000], node2[100000];int main(void) {int first, count, k, i, j;int n = 0;//节点数量,输入中可能有无效节点,n <= countintm, r;struct node x;scanf("%d%d%d", &first, &count, &k); for (i = 0; i < count; i++) { scanf("%d%d%d", &x.ad, &x.val, &x.next); node1[x.ad] = x; } for (i = 0, j = first; j != -1; j = node1[j].next, i++) { node2[i] = node1[j]; n++;//节点数量需要重新计算 }m = n / k;//周期数r = n % k;//剩余不足一周期的节点数(正序输出)//先把需要倒序的m个周期节点输出for (i = 0; i < m; i++) {for (j = (i+1)*k-1; j >= i*k; j--) {//首节点只需要输出该节点地址和值if (j == k-1)printf("%05d %d ", node2[j].ad, node2[j].val);//其余节点要输出两次地址(其中一次作为上一个的next)和一次值elseprintf("%05d\n%05d %d ", node2[j].ad, node2[j].ad, node2[j].val);}}//处理剩余正序输出的r个节点for (j = m * k; j < n; j++) {//当 n < k 时,全部正序输出,首节点只需输出一个地址if (j != 0)printf("%05d\n", node2[j].ad);printf("%05d %d ", node2[j].ad, node2[j].val);}printf("-1\n");//尾节点的nextreturn 0;}
- PAT 乙级-1025 链表反转
- PAT乙级 反转链表 (25)
- PAT 乙级 1025. 反转链表
- PAT乙级练习题B1025.反转链表
- PAT-乙级-1025. 反转链表 (25)
- [PAT-乙级]1025.反转链表
- PAT乙级 1025. 反转链表 (25)
- PAT乙级1025. 反转链表 (25)
- [PAT乙级]1025. 反转链表 (25)
- pat 乙级 1025. 反转链表 (25)
- 1025. 反转链表 (25)--PAT乙级
- PAT乙级题1025.反转链表
- PAT 乙级 1025. 反转链表 (25)
- PAT乙级—1025. 反转链表 (25)-native
- 1025. 反转链表 (25)-浙大PAT乙级真题
- PAT乙级(Basic Level)真题 >反转链表
- PAT乙级(中文)1025. 反转链表 (25)
- 1025. 反转链表 (25) PAT乙级真题
- c3p0联合struts2与DBUtils组件连接SQL Server 2008数据库
- 【2017新疆网络赛】H Skiing 最短路径spfa 模版
- 求一个数组中前K大的数或者第K大的数
- python运行出现IDLE's subprocess didn't make connection. Either IDLE can't start or personal firewal的解决方案
- FPGA与DSP5509A通过MCBSP接口通信
- PAT 乙级-1025 链表反转
- D
- 5.1 父类和子类的类型转换总结
- Python中的print用法
- mapreduce工作流程图(带注解)
- Linux搭建tomcat+jdk+mysql环境
- renderer.material 方法过时
- 二叉树前序,中序,后序
- 启程篇