1074. 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 33218Sample Output:
00000 4 33218 33218 3 12309 12309 2 00100 00100 1 99999 99999 5 68237 68237 6 -1
#include <iostream>
#include <stack>
#include <iomanip>
#include <deque>
#define SIZE 100005
using namespace std;
stack<int> s,s1;
deque <int > q;
struct Iterm{
int value;
int Next;
};
Iterm input[SIZE];
int main()
{
int start, num,k;
scanf("%d%d%d",&start,&num,&k);
int addr,nextaddr,value;
for(int i =0;i<num;i++){
scanf("%d%d%d",&addr,&value,&nextaddr);
input[addr].value=value;
input[addr].Next = nextaddr;
}
int count =0;
bool fix= false;
while(start !=-1){
s.push(input[start].value);
s.push(start);
start = input[start].Next;
count++;
if(count == k){
for(;count>0;count--){
int addr= s.top();
s.pop();
int value = s.top();
s.pop();
if(fix){
printf("%05d\n",addr);
}
printf("%05d %d ",addr,value);
fix =true;
}
}
}
while(!s.empty()){
int addr=s.top();
s.pop();
s1.push(s.top());
s.pop();
s1.push(addr);
}
while(!s1.empty()){
if(fix)
printf("%05d\n",s1.top());
int addr = s1.top();
s1.pop();
int value = s1.top();
s1.pop();
printf("%05d %d ",addr,value);
}
cout <<-1 <<endl;
return 0;
}