輸入一個複雜鏈表(每一個節點中有節點值,以及兩個指針,一個指向下一個節點,另外一個特殊指針指向任意一個節點)。dom
輸入可能包含多個測試樣例,輸入以EOF結束。
對於每一個測試案例,輸入的第一行爲一個整數n (1<=n<=1000):n表明將要輸入的鏈表元素的個數。(節點編號從1開始)。
接下來有n個數,表示鏈表節點中的值。
接下來有n個數Ti,Ti表示第i個節點的另外一個指針指向。
Ti = 0 表示這個指針爲NULL。測試
對應每一個測試案例,
輸出n行,每行有二個數,第一個表明當前節點值,第二個表明當前節點的特殊指針的值。spa
5 1 2 3 4 5 3 5 0 2 0
1 3 2 5 3 0 4 2 5 0
額,我又投機取巧了...指針
按照原題的意思,應該是給定了這個複雜的鏈表,而後每一個節點先複製一個節點,在把隨機的指針複製,移動隨機的指針,最後跳躍鏈接鏈表,便可。code
#include <stdio.h> #include <stdlib.h> typedef struct list{ int num; int random_link; }List; typedef struct listarr{ List arr[1000]; }ListArr; int main(){ int n,i; while(scanf("%d",&n)!=EOF && n>=1 && n<=1000){ ListArr *a = (ListArr *)malloc(sizeof(ListArr)); a->arr[0].num=0; a->arr[0].random_link=0; for(i=1;i<=n;i++) scanf("%d",&a->arr[i].num); for(i=1;i<=n;i++) scanf("%d",&a->arr[i].random_link); for(i=1;i<=n;i++) printf("%d %d\n", a->arr[i].num,a->arr[(a->arr[i].random_link)].num); } return 0; } /************************************************************** Problem: 1524 User: xhalo Language: C Result: Accepted Time:40 ms Memory:912 kb ****************************************************************/