74

用纯数组实现链表。写了有点久,主要是一些细节上的实现有点烦。

#include <iostream>
#include <cstdio>
using namespace std;

struct Node{
    int Pre;
    int Next;
    int Key;
    Node(int p,int n,int k):Pre(p),Next(n),Key(k){}
};
Node  *list[100010];

int main()
{
    int root,N,K;
    cin>>root>>N>>K;
    for(int i=0;i<N;i++)
    {
        int addr,key,next;
        cin>>addr>>key>>next;
        list[addr]=new Node(0,next,key);
    }
    list[root]->Pre=-1;
    for(int addr=root;list[addr]->Next!=-1;addr=list[addr]->Next)
    {
        list[list[addr]->Next]->Pre=addr;
    }

    int head=root,cnt,rear=-1;
    for(int i=head,flag=0;i!=-1&&list[i]->Next!=-1;)
    {
        cnt=K;
        while(cnt!=1&&list[i]->Next!=-1)
        {
            i=list[i]->Next;
            cnt--;
        }
        if(cnt==1)
        {
            if(flag==0)
            {
                root=i;
                flag=1;
            }
            if(rear!=-1)list[rear]->Next=i;
            head=list[i]->Next;
            while(cnt!=K)
            {
                list[i]->Next=list[i]->Pre;
                i=list[i]->Pre;
                cnt++;
            }
            list[i]->Next=head;
            rear=i;
            i=head;
        }
    }
    while(root!=-1)
    {
        if(list[root]->Next!=-1)printf("%05d %d %05d
",root,list[root]->Key,list[root]->Next);
        else printf("%05d %d %d
",root,list[root]->Key,list[root]->Next);
        root=list[root]->Next;
    }
}
原文地址:https://www.cnblogs.com/KRCheung/p/6661771.html