逆序輸出鏈表(數組模擬鏈表)

描述

根據給定的數據建立一個由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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章