1074 Reversing Linked List (25 分)

水~。

注意点

  1. 要考虑可能存在无效结点的情况,即不是由题目给出的头结点引出的单链表上的结点,这些结点是要去掉的,最终不予输出。
  2. 反转链表只改变结点的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;
}
posted @ 2021-03-03 16:27  Dazzling!  阅读(45)  评论(0编辑  收藏  举报