劍指OFFER之複雜鏈表的複製(九度OJ1524)

題目描述:

輸入一個複雜鏈表(每一個節點中有節點值,以及兩個指針,一個指向下一個節點,另外一個特殊指針指向任意一個節點)。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 ****************************************************************/
相關文章
相關標籤/搜索