採用遞迴逆序列印單鏈表(遞迴出口的三種寫法)

2021-07-24 16:06:49 字數 1218 閱讀 6593

// recurseprintlist.cpp : 定義控制台應用程式的入口點。

// 遞迴逆序列印鍊錶(遞迴出口的三種寫法)

#include "stdafx.h"

#include

using

namespace

std;

struct node;

node* createlist();

void printlist(node* head);

void reverseprint(node* ptr);

void reverseprint1(node* ptr);

void reverseprint2(node* ptr);

int _tmain(int argc, _tchar* argv)

// 建立鍊錶

node* createlist()

return head;

}void printlist(node* head)

}// 遞迴出口寫法1

void reverseprint(node* ptr)

}// 遞迴出口寫法2

// return表示程式中斷,return後面的**都不會執行

// 慎用return,在二叉樹的遞迴中,如果左子樹到達出口return了,但此時右子樹可能未到達出口,直接return會導致後面右子樹的**不能執行

void reverseprint1(node* ptr)

reverseprint(ptr->next);

cout

}// 遞迴出口寫法3

// 到達遞迴出口就啥也不做,因為遞迴函式本身沒有返回值

void reverseprint2(node* ptr)else

}

return一般用在程式的第一句對引數校驗是否合格,如果不合格就直接返回,下面的**就不用執行了。

第一種和第三種寫法是推薦的,第二種寫法很多情況下會出問題,因為在函式遞迴呼叫過程中錯誤的return會導致後面的**不能執行。

對於這種沒有返回值的遞迴呼叫,可以在函式體中只指明遞迴呼叫的條件,像第一種寫法,其他不能遞迴呼叫的情況就不用管了,不符合這個條件時遞迴自然就到達了出口處,此時程式就會啥也不做,程式自然就結束了。快速排序的主函式中就是這樣寫的。

同樣也可以採用第三種寫法,因為沒有返回值,到達遞迴出口時啥也不做就行了。

注意以上討論的情況只適用於沒有返回值的情況。

逆序列印單鏈表

二叉樹的操作 逆序列印單鏈表 void printslistfromtail2head pnode phead 逐個遍歷 每次從頭開始遍歷查詢到最後乙個要列印的元素 這個方法有點繁瑣,可以進行優化 void printslistfromtail2head pnode phead printf 逆序後...

單鏈表的逆置(遞迴和非遞迴)

include include typedef char linktype typedef struct linklistlinklist void linklistinit linklist head head null void linklistprint linklist head linkl...

單鏈表遞迴

以前覺得遞迴太麻煩,指標方便多了,於是乎單鏈表的題目都是用迭代呀,雙指標呀來做的。這次突破下自己,將單鏈表的遞迴掰扯一下,等下會用乙個簡單的小題目來作為例子 我先講一下平常遞迴的流程,方便待會單鏈表遞迴的理解 題目 輸入乙個數字 n 123,列印出1,2,3 void print n 執行流程圖 鍊...