1074.Reversing Linked List

来源:互联网 发布:网络架构是什么 编辑:程序博客网 时间:2024/05/16 07:34
【题意】
        对于一个存数的链表,每k个节点倒置一次,从头结点到尾节点输出结果

【思路】
        先用map存下输入的节点,然后按照从头到尾的顺序放入一个vector中,最后借助reverse函数即可实现倒置

【注意点】

        之前做1052题的时候我默认所有节点都是有用的,结果错了几次才发现可能有多余节点。这次一开始就注意了这个问题于是1A了,估计也有设置相同的陷阱


#include <iostream>#include <cstdio>#include <vector>#include <map>#include <algorithm>using namespace std;typedef struct{int addr;int value;int next;}node;int main(int argc, char const *argv[]){int id,n,k;vector<node> lis;map<int,pair<int,int>> input;cin >> id >> n >> k;for(int i=0; i<n; i++){int addr,value,next;cin >> addr >> value >> next;input[addr] = pair<int,int>(value,next);}while(id!=-1){node tmp;tmp.addr = id;tmp.value = input[id].first;tmp.next = input[id].second;lis.push_back(tmp);id = input[id].second;}int left,right;left = 0;right = k;while(right<=lis.size()){reverse(lis.begin()+left,lis.begin()+right);left = right;right = left+k;}for(int i=0; i<lis.size(); i++){printf("%05d %d ", lis[i].addr, lis[i].value);if(i<lis.size()-1){printf("%05d\n", lis[i+1].addr);}else{cout << -1;}}system("pause");return 0;}


0 0
原创粉丝点击