逆向打印单链表

这里我们将介绍逆向打印单链表的三种方法:

  1. 利用循环以及三个指针,将单链表的_pNext指针的指向改变(这种方法改变了单链表)
  2. 利用栈的特性“先进后出”来实现,将链表结点的值全部入栈后再依次出栈
  3. 利用递归来实现

    给出结点

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

//单链表
typedef struct Node
{
    Node(int data)
        :_data(data)
        ,_pNext(NULL)
    {}
    int _data;
    Node* _pNext;
}*PNode;

方法一:

Node* ReverseList(Node*& pHead)
{
    if(pHead == NULL)
        return NULL;
    Node* pPreNode = pHead;
    Node* pCurNode = pHead->_pNext;
    Node* pNetNode = pHead->_pNext;

    pPreNode->_pNext = NULL;//将第一个结点的_pNext指向NULL,头结点变成尾结点
    while(pCurNode)
    {
        pNetNode = pCurNode->_pNext;
        pCurNode->_pNext = pPreNode;
        pPreNode= pCurNode;
        pCurNode = pNetNode;
    }
    return pPreNode;
}

方法二:

#include<stack>
void PrintListFromTailToHead(Node* pHead)
{
    stack<Node*> nodes;//构建一个栈

    Node* pNode = pHead;
    while(pNode!=NULL)
    {
        nodes.push(pNode);//节点入栈
        pNode = pNode->_pNext;
    }
    while(!nodes.empty())
    {
        pNode = nodes.top();//栈顶的元素
        printf("%d\t",pNode->_data);
        nodes.pop();//出栈
    }
}

方法三:

void PrintListFromTailToHead(Node* pHead)
{
    if(pHead==NULL)
        return;
    PrintListFromTailToHead(pHead->_pNext);
    cout<<pHead->_data<<" ";
}

测试代码:

void funtest()
{
    Node n1(1);
    Node n2(2);
    Node n3(3);
    Node n4(4);

    n1._pNext =&n2;
    n2._pNext =&n3;
    n3._pNext = &n4;

    PrintListFromTailToHead(&n1);
}
int main()
{
    funtest();
    getchar();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值