從尾到頭列印單鏈表 遞迴及非遞迴實現

2021-08-20 12:22:53 字數 804 閱讀 1271

思路一:陣列法

構建乙個datatype型別的陣列,將單鏈表所有的資料儲存下來,

再將陣列倒序輸出就可以。

缺點:相對於較長單鏈表不適合,對於較短單鏈表浪費資源

void printlist(linknode* head)

while(i!=0)

printf("\n");

}

思路二:頭插法

建立乙個新單鏈表將舊單鏈表中的資料按順序頭插入新鍊錶,

再將新單鏈表輸出就完成了倒序列印。

void printlist(linknode* phead)

listprint(&

new); //列印新鍊錶

listdestroy(&

new); //銷毀鍊錶

}

思路三:遞迴法

遞迴進行倒序列印,即想列印第乙個就需要列印第二個,

以此類推直到最後乙個資料先列印出來,再返回去列印之前的資料。

採用遞迴注意出口條件,該節點和下乙個節點是否為空

void listprint(listnode* head)

if(head!=

null) //防止為空鍊錶

printf("%d\n",head->

data);

}

從尾到頭列印單鏈表(遞迴與非遞迴)

非遞迴演算法 首先定義兩個尾指標tail1和tail2,遍歷鍊錶使tail1指向鍊錶的尾節點,然後輸出資料,再使tail2等於tail1記錄該節點,第二次遍歷時使tail1指向tail2的前乙個節點,輸出資料,依次類推完成列印。遞迴演算法 若該節點的下乙個節點為空的時候直接列印,若不為空傳入下乙個節...

從尾到頭列印單鏈表

由於單鏈表只能從按單個方向訪問下乙個節點,而不能訪問前乙個節點。首先,解決這個問題肯定要遍歷鍊錶。遍歷的順序是從頭到尾的順序,可輸出的順序卻是從尾到頭。也就是說第乙個遍歷到的結點最後乙個輸出,而最後乙個遍歷到得結點第乙個輸出。這就是典型的 後進先出 可以用 棧實現這種順序。實現程式過程 每經過乙個結...

從尾到頭列印單鏈表

include using namespace std include includetypedef struct node 節點結構 node node create 尾插法建立單鏈表 else q p p node malloc sizeof node p next null if flag 0...