从尾到头输出单链表

本文介绍了一种使用C++实现的链表结构,并演示了如何初始化链表、反转链表及从尾到头打印链表的方法。通过递归和栈两种方式实现了逆序打印链表的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
#include <stack>
#include <string>
#include <iostream>
using namespace std;
#include <stack>  

typedef struct Link{

    int value;

    struct Link  * LinkNext ;

}Link,* LinkList;

void initList(LinkList * head ){

    if (head != NULL)  {

        for (int i=0; i<10; i++) {

            LinkList p = (LinkList)malloc(sizeof(Link));

            p->value = i;

            p->LinkNext = (*head)->LinkNext;

            (*head)->LinkNext = p;

        }
    }
}

LinkList reverse(LinkList head){

    LinkList last = NULL ;

    LinkList start = head ;

    while (start  != NULL) {

        LinkList temp = start->LinkNext;

        start->LinkNext = last ;

        last = start ;

        start = temp ;
    }

    return last;

}

LinkList reverse_DG(LinkList  start , LinkList last = NULL){

    if(start == NULL)

        return last;

    LinkList temp = start->LinkNext;

    start->LinkNext = last;

    return reverse_DG(temp , start);

}

void printList(LinkList start){

    if (start != NULL) {

        while (start != NULL) {

            cout<<start->value<<" ";

            start = start->LinkNext;

        }
    }

}

//从尾到头打印链表方法1 递归

void Print_method1(LinkList head){

    if (head == NULL) {

        return ;
    }

    Print_method1(head->LinkNext);

    cout<<head->value<<" ";
}

//从尾到头打印链表2 利用栈

void Print_methid2(LinkList head){

    if(head != NULL || head->LinkNext != NULL){

        stack<int> list ;

        while( head !=NULL ){

            list.push(head->value);

            head = head->LinkNext;
        }

        while(!list.empty()){

            cout<<list.top()<<" ";

            list.pop();
        }
    }


}

int main(int argc , const char * argv[]) {

    LinkList head = (LinkList)malloc(sizeof(Link));

    head->LinkNext = NULL;

    initList(&head);

    cout<<"原始的数值:"<<endl;

    printList(head->LinkNext);

    LinkList q = NULL;

    q = reverse_DG(head->LinkNext);

    //   q = reverse(head->LinkNext);

    cout<<endl<<"反转后的的数值:"<<endl;

    printList(q);

    cout<<endl<<"从尾到头打印链表"<<endl;

    //Print_method1(q);

    Print_methid2(q);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值