Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→4; if K=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 N (≤) which is the total number of nodes, and a positive K (≤) 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 N 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 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218

Sample Output:

00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1
#include<cstdio>
#include<algorithm>
using namespace std; const int maxn = ;
struct Node{
int address,data,next;
int flag;
}node[maxn]; bool cmp(Node a,Node b){
return a.flag < b.flag;
} //void print(int i,int k,int n){
// int j;
// for(j = i + k - 1; j >= i; j--){
// printf("%05d %d ",node[j].address,node[j].data);
// if(j > i){
// printf("%05d\n",node[j-1].address);
// }else{
// if(i+2*k<=n){
// printf("%05d\n",node[i+2*k].address);
// }
// }
// }
//} int main(){
for(int i = ; i < maxn; i++){
node[i].flag = maxn;
}
int n,k,begin;
scanf("%d%d%d",&begin,&n,&k);
int address;
for(int i = ; i < n; i++){
scanf("%d",&address);
scanf("%d%d",&node[address].data,&node[address].next);
node[address].address = address;
//node[address].flag = maxn;
}
int count = ,p = begin;
while(p!=-){
node[p].flag = count++;
p = node[p].next;
}
sort(node,node+maxn,cmp);
n = count;
for(int i = ; i < n/k; i++){
for(int j = (i+)*k-; j > i*k; j--){
printf("%05d %d %05d\n",node[j].address,node[j].data,node[j-].address);
}
printf("%05d %d ",node[i*k].address,node[i*k].data);
if(i < n/k-) printf("%05d\n",node[(i+)*k-].address);
else{
if(n%k==) printf("-1\n");
else{
printf("%05d\n",node[(i+)*k].address);
for(i = n/k*k; i < n; i++){
printf("%05d %d ",node[i].address,node[i].data);
if(i < n-) printf("%05d\n",node[i+].address);
else printf("-1\n");
}
}
}
} // if(n == 1){
// printf("%05d %d -1\n",node[0].address,node[0].data);
// return 0;
// }
// bool flag = true;
// if(count%k!=0){
// while(count%k!=0) count--;
// flag = false;
// }
// for(int i = 0; i < count; i += k){
// print(i,k,count);
// }
//
// if(flag == true){
// printf("-1\n");
// }else{
// printf("%05d\n",node[count].address);
// for(int i = count; i < n; i++){
// printf("%05d %d ",node[i].address,node[i].data);
// if(i < n - 1) printf("%05d\n",node[i+1].address);
// else printf("-1\n");
// }
// }
//
// for(int i = 0; i < n; i++){
// printf("%05d %d\n",node[i].address,node[i].data);
// }
return ;
}

02-线性结构3 Reversing Linked List (25 分)的更多相关文章

  1. PTA 02-线性结构3 Reversing Linked List (25分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/664 5-2 Reversing Linked List   (25分) Given a ...

  2. 02-线性结构3 Reversing Linked List (25 分)

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...

  3. pat02-线性结构1. Reversing Linked List (25)

    02-线性结构1. Reversing Linked List (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, ...

  4. PAT 甲级 1074 Reversing Linked List (25 分)(链表部分逆置,结合使用双端队列和栈,其实使用vector更简单呐)

    1074 Reversing Linked List (25 分)   Given a constant K and a singly linked list L, you are supposed ...

  5. 数据结构练习 02-线性结构2. Reversing Linked List (25)

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...

  6. 浙大数据结构课后习题 练习二 7-2 Reversing Linked List (25 分)

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...

  7. 【PAT甲级】1074 Reversing Linked List (25 分)

    题意: 输入链表头结点的地址(五位的字符串)和两个正整数N和K(N<=100000,K<=N),接着输入N行数据,每行包括结点的地址,结点的数据和下一个结点的地址.输出每K个结点局部反转的 ...

  8. PAT甲级1074 Reversing Linked List (25分)

    [程序思路] 先根据地址按顺序读入节点,入栈,当栈里的元素个数等于k时全部出栈,并按出栈顺序保存,最后若栈不为空,则全部出栈并按出栈的稀饭顺序保存,最后输出各节点 注意:输入的节点中有可能存在无用节点 ...

  9. 02-线性结构3 Reversing Linked List

    02-线性结构3 Reversing Linked List   (25分) 时间限制:400ms 内存限制:64MB 代码长度限制:16kB 判题程序:系统默认 作者:陈越 单位:浙江大学 http ...

  10. 02-线性结构3 Reversing Linked List(25 point(s)) 【链表】

    02-线性结构3 Reversing Linked List(25 point(s)) Given a constant K and a singly linked list L, you are s ...

随机推荐

  1. select下拉列表

    1.写 <!DOCTYPE html> <html> <head> <title></title> <script language= ...

  2. json操作工具-LitJson

    LitJSON是json生成与读取的操作工具,使用很方便并且网上还能找到源码.下面是使用LitJSON的例子: 一.生成json:实例化一个JsonData,然后按照List数组的方式向里面填. Js ...

  3. 如何查看HBase的HFile

    记一个比较初级的笔记. ===流程=== 1. 创建一张表 2. 插入10条数据 3. 查看HFile ===操作=== 1.创建表 package api; import org.apache.ha ...

  4. Spring Boot☞ 使用Spring-data-jpa简化数据访问层

    效果图: 代码区: package com.wls.integrateplugs.jpa.primary.model; /** * Created by wls on 2017/8/24. */ im ...

  5. 慎用WSACleanup()

    中止Windows Sockets DLL的使用.         #include <winsock.h>         int PASCAL FAR WSACleanup ( voi ...

  6. opencv—读取一张图片并滤波

    #include <opencv2\opencv.hpp> #include <iostream> #include <string> using namespac ...

  7. PyCharm社区版+Django搭建web开发环境-2

    接上一篇:PyCharm社区版+Django搭建web开发环境-1 1. 创建好django项目并建立app应用:web 2. setting.py:配置app应用 INSTALLED_APPS = ...

  8. 按照已有的模板打印小票<二> ——调用windows打印机打印 可设置字体样式

    按照已有的模板打印小票<二> ——调用windows打印机打印 可设置字体样式 之前写过一篇文章<按照已有的模板输出一(如发票)>,是关于如何给已有的模板赋值.在项目的实践过程 ...

  9. 开发.NET Core NuGet包并实现CI/CD

    实际开发中我们需要对一些公共类库进行开发,并基于Jenkins进行CI/CD(CI:持续集成,CD:持续部署),其他项目通过NuGet引用.上文讲述了如何搭建本地NuGet服务器并发布NuGet包,这 ...

  10. django view function

    view function 的几种返回值 return HttpResponse(html) return HttpResponseNotFound(html) raise Http404(" ...