從尾到頭列印單鏈表 遞迴及非遞迴實現
阿新 • • 發佈:2019-01-03
思路一:陣列法
構建一個Datatype型別的陣列,將單鏈表所有的資料儲存下來,
再將陣列倒序輸出就可以。
缺點:相對於較長單鏈表不適合,對於較短單鏈表浪費資源
void printlist(LinkNode* head)
{
Datatype arr[100] ;
int i=0;
while(head!=NULL)
{
arr[i++]=head->data;
head=head->next;
}
while(i!=0)
{
printf("%d ",arr[--i];
}
printf("\n");
}
思路二:頭插法
建立一個新單鏈表將舊單鏈表中的資料按順序頭插入新連結串列,
再將新單鏈表輸出就完成了倒序列印。
void printlist(LinkNode* phead)
{
//建立新連結串列
LinkNode* new=NULL;
while(phead!=NULL)
{
//頭插入新連結串列
ListPushFront(&new,phead->data);
phead=phead->next;
}
ListPrint(& new); //列印新連結串列
ListDestroy(&new); //銷燬連結串列
}
思路三:遞迴法
遞迴進行倒序列印,即想列印第一個就需要列印第二個,
以此類推直到最後一個數據先打印出來,再返回去列印之前的資料。
採用遞迴注意出口條件,該節點和下一個節點是否為空
void Listprint(ListNode* head)
{
if(head!=NULL && head->next!=NULL)
{
Listprint(ListNode* head->next);
}
if (head!=NULL) //防止為空連結串列
printf("%d\n",head->data);
}