1074 Reversing Linked List (25 分)
水~。
注意点
- 要考虑可能存在无效结点的情况,即不是由题目给出的头结点引出的单链表上的结点,这些结点是要去掉的,最终不予输出。
- 反转链表只改变结点的next地址,而不会改变本身的地址,因此address和data可以视为绑定的。
const int N=1e5+10;
struct Node
{
int addr,data,nxt;
}a[N];
int head,n,k;
int main()
{
cin>>head>>n>>k;
for(int i=0;i<n;i++)
{
int addr,data,nxt;
cin>>addr>>data>>nxt;
a[addr]={addr,data,nxt};
}
vector<Node> res;
int p=head;
while(p != -1)
{
res.pb(a[p]);
p=a[p].nxt;
}
for(int i=0;i<res.size();i+=k)
{
if(i+k > res.size()) break;
reverse(res.begin()+i,res.begin()+i+k);
}
for(int i=0;i<res.size();i++)
{
if(i == res.size()-1)
printf("%05d %d -1\n",res[i].addr,res[i].data);
else
printf("%05d %d %05d\n",res[i].addr,res[i].data,res[i+1].addr);
}
//system("pause");
return 0;
}