7-5 Reversing Linked List
分数 25
全屏浏览题目
切换布局
作者 陈越
单位 浙江大学
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 (≤105) which is the total number of nodes, and a positive K (≤N) 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
注意此处实则读入的输入顺序:
00100 1 12309
12309 2 33218
33218 3 00000
00000 4 99999
99999 5 68237
68237 6 -1
#然后按照k=4反转
Sample Output:
00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
知识点
reverse反转函数(c++)
函数功能介绍:将容器[first, last )范围内的元素颠倒顺序放置
函数细节注意:头文件 #include<algorithm>
#include<stdio.h>
#include<algorithm>
#include<iostream>
#define N 100005
struct nodata1
{
int address;
int data;
int next;
}a[N], *b[N];
using namespace std;
int main()
{
int n,k,head;
int temp;
scanf("%d %d %d", &head, &n, &k);
for (int i = 0; i < n; i++)
{
scanf("%d", &temp);
a[temp].address = temp;
scanf("%d%d", &a[temp].data, &a[temp].next);
}
int j = 0;
int t = head;
while (t != -1)
{
b[j++] = &a[t];
t = a[t].next;
}
for (int i = 0; i <=j-k; i += k)
reverse(b + i, b + i + k);//反转
for (int i = 0; i < j; i++)
{
if (i != j - 1)
printf("%05d %d %05d\n", b[i]->address, b[i]->data, b[i + 1]->address);
else
printf("%05d %d -1\n", b[i]->address, b[i]->data);
//%05d输出5位整数
}
}