描述
根據給定的數據建立一個由n(1≤n≤1000)個元素組成的鏈表,然後按邏輯順序逆序輸出其中所有的數據。
每個元素節點由兩個域組成:第一個域存儲數據,第二個域存儲後繼元素所在的位置。特別的,頭結點的第一個域用來存儲整個鏈表的長度。例如頭結點(5, 3)表示長度爲5,後繼元素在3號位置;元素節點(14,7)表示數據值爲14,後繼節點在7號位置。如果後繼指針爲0則表示鏈表結束。
例如: (6, 6)(673, 4)(428, 1)(685, 2)(170, 0)(488, 3)(519, 5)
第一個元組(6,6)是頭結點,此鏈表逆序爲:170,673,428,685,488,519
再比如: (8, 7)(821, 2)(677, 3)(614, 5)(723, 1)(487, 6)(680, 8) (45, 4)(843, 0)
逆序數據爲:843, 680, 487, 614, 677,821,723,45
格式
輸入格式
第一行是兩個正整數,表示頭結點,第一個正整數是鏈表的長度,第二個正整數是它的後繼。
從第二行到最後一行,每行表示一個元素,第一個正整數是元素中存儲的數據,第二個整數是它的後繼,如果爲0則表示最後一個元素。
輸出格式
一行數據,每個數據之間以空格分隔。
樣例
輸入樣例
5 2
426 3
797 1
970 4
481 5
170 0
輸出樣例
170 481 970 426 797
限制
時間限制:100 ms
內存限制:16384 KB
#include <bits/stdc++.h>
using namespace std;
struct data{
int num;
int next;
} d[1005];
int main(){
int a, b, n, m, ans[1005];
scanf ("%d %d", &n, &m);
memset(ans, 0, sizeof(ans));
d[0].num = n;
d[0].next = m;
for (int i=1; i<=n; i++) {
scanf ("%d %d", &d[i].num, &d[i].next);
}
int i=0;
while(m!=0) {
ans[i] = d[m].num;
i++;
m = d[m].next;
}
printf ("%d", ans[i-1]);
for (int j=i-2; j>=0; j--) {
printf (" %d", ans[j]);
}
return 0;
}