1. 程式人生 > >從尾到頭列印單鏈表 遞迴及非遞迴實現

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

思路一:陣列法

        構建一個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); }