题目:
输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
思路:
1、栈
2、递归
代码:
#include<iostream>
#include <stack>
#include<vector>
using namespace std;
struct ListNode
{
int m_nKey;
ListNode *m_pNext;
ListNode(){}
ListNode(int value):m_nKey(value),m_pNext(NULL){}
};
//逆序打印链表,迭代法,用栈实现
void PrintListReversingly_Iteratively(ListNode *pHead)
{
stack<ListNode *> nodes;
while(pHead)
{
nodes.push(pHead);
pHead = pHead->m_pNext;
}
while(!nodes.empty())
{
ListNode *tmp = nodes.top();
cout<<tmp->m_nKey<<" ";
nodes.pop();
}
}
//递归实现
void PrintListReversingly_Recursively(ListNode *pHead)
{
if(pHead != NULL)
{
PrintListReversingly_Recursively(pHead->m_pNext);
cout<<pHead->m_nKey<<" ";
}
}
int main()
{
ListNode *p1 = new ListNode(1);
ListNode *p2 = new ListNode(2);
ListNode *p3 = new ListNode(3);
p1->m_pNext = p2;
p2->m_pNext = p3;
PrintListReversingly_Recursively(p1);
cout<<endl;
PrintListReversingly_Iteratively(p1);
cout<<endl;
}