1. 程式人生 > >【資料結構】逆序輸出單鏈表資料

【資料結構】逆序輸出單鏈表資料

思路:遞迴。形式為(輸出該資料之後的連結串列值)+輸出這個資料。

值得一提的是,如果帶有頭節點的單鏈表,需要前行前行一位,使連結串列指向開始節點。程式碼如下:

void printDeverse_main(LinkList List)
{
	List = List->next;//起始為開始節點
	printDeverse(List);
}

我的遞迴程式碼:

void printDeverse(LinkList List)
{
	if (List == NULL)
	{
		return;
	}
	if (List->next != NULL)
	{
		printDeverse(List->next);
		cout << " " << List->data;
	}
	if (List->next == NULL)
	{
		cout<< List->data;
	}
}

標準答案顯得更加簡潔:

void reprint(LinkList List)
{
	if (List != NULL)
	{
		reprint(List->next);
		cout << List->data << " ";
	}
}

分析:

我的遞迴,是挺教條的。

1.首先考慮一般情況,輸出完這個資料後,則應該再次呼叫該函式

	if (List->next != NULL)
	{
		printDeverse(List->next);
		cout << " " << List->data;
	}

2.如果輸出完後沒有這個資料,則呼叫:

	if (List->next == NULL)
	{
		cout<< List->data;
	}

3.如果連結串列為空,則:

	if (List == NULL)
	{
		return;
	}

其實這三種情況,概況起來就是標準答案,如果連結串列不空,就呼叫遞迴,並輸出該資料。如果連結串列空了,就不作為。簡潔明瞭。我的就過於冗餘了。