本题来源于《剑指offer》51页面试题5:从头到尾打印链表,原题如下:
输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
这里将给出三种方法,三种方法均未对原链表进行修改。
#include<iostream>
#include<stack>
using namespace std;
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
//创建单链表
ListNode* CreateList(int n)
{
ListNode* pHead=NULL,*p=NULL,*q=NULL;
int key;
for(int i=0;i<n;i++)
{
cout<<"请输入第"<<i+1<<"个key:\n";
cin>>key;
p=new ListNode;
p->m_nKey=key;
p->m_pNext=NULL;
if(pHead==NULL)
pHead=p;
else
q->m_pNext=p;
q=p;
}
return pHead;
}
//第一种反序输出:通过使用std::stack,先使ListNode从头到尾进栈,然后出栈
void PrintListReversingly1(ListNode* pHead)
{
std::stack<ListNode*> nodes;
ListNode* pNode=pHead;
while(pNode!=NULL)
{
nodes.push(pNode);
pNode=pNode->m_pNext;
}
while(!nodes.empty()