1074 Reversing Linked List
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
/* Name: Copyright: Author: 流照君 Date: 2019/8/5 14:52:14 Description: */ #include <iostream> #include<string> #include <algorithm> #include <vector> using namespace std; const int inf=100100; int main(int argc, char** argv) { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int num=0,first,n,k,list[inf],add[inf],temp,next[inf]; cin>>first>>n>>k; for(int i=1;i<=n;i++) { cin>>temp; cin>>add[temp]>>next[temp]; } while(first!=-1) //不是所有输入都是有用的 { list[num++]=first; first=next[first]; } for(int i=0;i<num-num%k;i=i+k) reverse(begin(list)+i,begin(list)+i+k); //反转函数 for(int i=0;i<num-1;i++) printf("%05d %d %05d\n",list[i],add[list[i]],list[i+1]); printf("%05d %d -1", list[num - 1], add[list[num - 1]]); return 0; }
特别说一下
C++11引入了 begin 和 end 的函数,这两个函数与容器中的两个同名成员功能类似,不过这两个函数不是成员函数,而是含有参数的函数。
用法说明:
begin 返回首元素的地址,end 返回尾元素的下一个地址。