从尾到头打印单链表

从尾到头打印链表:输入一个链表的头节点,从尾到头反过来打印每个节点的值。
下面介绍三种方法来实现此题目
①直接改变指针的方向,这种方法一般不提倡,它改变了链表的结构
②既然是从尾到头打印,我们很容易就可以想到栈,栈的结构是“后进先出”
我们可以先遍历一遍链表,如果当前节点不为空,就让其入栈,用栈先将当前遍历的值保存起来,知道遍历到链表的最后一个节点为空之后,再将栈中保存的值输出。
首先先定义一个链表结构

struct ListNode   //定义链表结构
{
    int data;
    ListNode* pNext;
}Node;

函数的实现如下:

void PrintHeadtoTail(ListNode* pHead)
{
    std::stack<ListNode*> s;//定义一个栈来存储链表的节点
    ListNode* pNode = pHead;
    while (pNode)     //当链表不为空时,将链表节点入栈
    {
        s.push(pNode);
        pNode = pNode->pNext;
    }    //出了循环,链表遍历完成
    while (!s.empty())   //打印栈中的数据
    {
        pNode = s.top();
        printf("%d\t", pHead->data);
        s.pop();
    }

}

③用递归的方法来实现(有可能栈)溢出

void PrintHeadtoTail(ListNode* pHead)
{
    if (pHead != NULL)
    {
        if (pHead->pNext != NULL)
        {
            PrintHeadtoTail(pHead->pNext);
        }
    }
    printf("%d\t", pHead->data);

}

猜你喜欢

转载自blog.csdn.net/wyn126/article/details/79795555