1025 反转链表 (25分)+测试点详解

it2023-06-16  71

题目链接 转载自https://blog.csdn.net/qq_45735810/article/details/106884432?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param 链接 AC代码

#include <iostream> #include <vector> using namespace std; typedef struct { int adr,data,next; }NODE; int main() { int head,n,k; cin>>head>>n>>k; NODE arr[100000]={0}; for (int i=0; i<n; ++i) { NODE temp; cin>>temp.adr>>temp.data>>temp.next; arr[temp.adr]=temp; } vector<NODE> shunxu,fanzhuan; int next=head; while (next!=-1) { //建立原本的顺序的链表 shunxu.push_back(arr[next]); next=arr[next].next; } int start=0; //每k个反转一下 条件要小于实际链表大小 而不是n while (start+k-1<shunxu.size()) { for (int i=start+k-1; i>=start; --i) fanzhuan.push_back(shunxu[i]); start+=k; } //插入剩余未反转结点 条件要小于实际链表大小 而不是n for (int j=start; j<shunxu.size(); ++j) fanzhuan.push_back(shunxu[j]); for (next=0; next<fanzhuan.size()-1; ++next) printf("%05d %d %05d\n",fanzhuan[next].adr,fanzhuan[next].data,fanzhuan[next+1].adr); printf("%05d %d -1\n",fanzhuan[next].adr,fanzhuan[next].data); }
最新回复(0)