请问怎么构建一个指定地址的链表,如下图?


#include<stdio.h>
typedef struct list {
    int data;
    struct list* next;
} list;
int main() {
    int address0, N, K;
    scanf("%d %d %d\n", &address0, &N, &K);//输入第一行
    for (int i = 0; i < N; i++) {//输入每个节点信息
        int address, data, next;
        scanf("%d %d %d\n", &address, &data, &next);
        list* point = address;
        point->data = data;
        point->next = next;
    }

这段是我输入时的代码,但只能输入三行,不知道怎么在指定地址申请空间
img

#include<stdio.h>
typedef struct list{
    int data;
    int next;
} list;
list l[100010];
int addr[100010],idx = 0;

int rever(int K,int ad){
    int p = ad,q = l[p].next,r = l[q].next;
    addr[idx++] = ad;
    for(int i = 0;i < K - 1;i++){
        l[q].next = p;
        p = q;
        q = r;
        r = l[r].next;
    }
    addr[idx++] = p;
    return q;
}
int solve(int beg,int K,int N){
    int p = beg;
    for(int i = K;i <= N;i += K){
        p = rever(K,p);
    }
    for(int i = 0;i < idx;i += 2){
        l[addr[i]].next = addr[i + 3];
    }
    l[addr[idx - 2]].next = p;
    return addr[1];
}
int main() {
    int address0,N,K;
    scanf("%d %d %d", &address0, &N, &K);//输入第一行
    for (int i = 0; i < N; i++) {//输入每个节点信息
        int address, data, next;
        scanf("%d %d %d", &address, &data, &next);
        l[address].data = data;
        l[address].next = next;
    }
    int beg = solve(address0,K,N);
    for(int i = 0,p = beg;i < N;i++){
        printf("%05d %d %05d\n",p,l[p].data,l[p].next);
        p = l[p].next;
    }
    return 0;
}

给你改好了。
C语言中没有指定内存地址分配空间的操作。
这道题目的意思,应该是采用模拟链表进行实现。
即预先定义好一个数组,将数组的下标作为“地址”,从而将一个个元素串联在一起,形成一个链表(这种操作在算法竞赛中非常常见)。