思路一:陣列法
構建乙個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...