从尾到头打印单链表 递归及非递归实现

思路一:数组法

        构建一个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);
}

猜你喜欢

转载自blog.csdn.net/yu876876/article/details/80586562