博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PTA 02-线性结构3 Reversing Linked List (25分)
阅读量:5341 次
发布时间:2019-06-15

本文共 2279 字,大约阅读时间需要 7 分钟。

题目地址

https://pta.patest.cn/pta/test/16/exam/4/question/664

 

5-2 Reversing Linked List   (25分)

Given a constant KK and a singly linked list LL, you are supposed to reverse the links of every KK elements on LL. For example, given LL being 1→2→3→4→5→6, if K = 3K=3, then you must output 3→2→1→6→5→4; if K = 4K=4, you must output 4→3→2→1→5→6.

Input Specification:

Each input file contains one test case. For each case, the first line contains the address of the first node, a positive NN (\le 10^5105​​) which is the total number of nodes, and a positive KK (\le NN) which is the length of the sublist to be reversed. The address of a node is a 5-digit nonnegative integer, and NULL is represented by -1.

Then NN lines follow, each describes a node in the format:

Address Data Next

where Address is the position of the node, Data is an integer, and Next is the position of the next node.

Output Specification:

For each case, output the resulting ordered linked list. Each node occupies a line, and is printed in the same format as in the input.

Sample Input:

00100 6 400000 4 9999900100 1 1230968237 6 -133218 3 0000099999 5 6823712309 2 33218

Sample Output:

00000 4 3321833218 3 1230912309 2 0010000100 1 9999999999 5 6823768237 6 -1
/*评测结果时间	结果	得分	题目	编译器	用时(ms)	内存(MB)	用户2017-07-08 15:54	答案正确	25	5-2	gcc	131	3	测试点结果测试点	结果	得分/满分	用时(ms)	内存(MB)测试点1	答案正确	12/12	2	1测试点2	答案正确	3/3	14	1测试点3	答案正确	2/2	1	1测试点4	答案正确	2/2	2	1测试点5	答案正确	2/2	2	1测试点6	答案正确	3/3	131	3测试点7	答案正确	1/1	2	1*/#include
#define MAXLEN 100002struct node { int data; int next;};int k,head;struct node workArray [MAXLEN];int Input(struct node array[]){ int i,inputHead,inputLength; int index,data,next; scanf("%d %d %d",&inputHead,&inputLength,&k); for (i=0;i
ptr2改为ptr2->ptr1。因为ptr2中的next原有内容会丢失,故用ptr3保存ptr2的下一个节点 执行完一次后,k个节点区间内,头尾互换。 故lastend保存前一区块的末端,是上一区间的头节点 nexthead即下一区块的头结点,同样也是该区块翻转完后的末端。于是提前用lastend=nexthead保存。 */ int cnt; if(k==1) return; cnt=count(*head,array); int i,ptr1,ptr2,ptr3,firstflag=0,nexthead=*head,lastend=-2;//ptr1指当前指针,ptr2指下一个要指向ptr1的,ptr3指向还未做反转的下一个。 while(cnt>=k){// printf("-------head=%d,nexthead=%d,cnt=%d\n",*head,nexthead,cnt);//for_test ptr1=nexthead; ptr2=array[ptr1].next; for(i=1;i

  

 

转载于:https://www.cnblogs.com/gk2017/p/7140520.html

你可能感兴趣的文章
PKUWC2018 5/6
查看>>
As-If-Serial 理解
查看>>
洛谷P1005 矩阵取数游戏
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>
如何在工作中快速成长?阿里资深架构师给工程师的10个简单技巧
查看>>
WebSocket 时时双向数据,前后端(聊天室)
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
安卓第十三天笔记-服务(Service)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Zookeeper概述
查看>>
Zookeeper一致性级别
查看>>
Linux远程登录
查看>>
Linux自己安装redis扩展
查看>>
HDU 1016 Prime Ring Problem(dfs)
查看>>
C#中结构体与字节流互相转换
查看>>