题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
#include <iostream>
#include <stack>
using namespace std;
struct ListNode
{
int key;
ListNode* next;
};
ListNode* createList(int n)
{
ListNode* pHead = new ListNode();
ListNode* current = new ListNode();
current->key = 1;
current->next = NULL;
pHead = current;
for(int i = 2; i <= n; i++)
{
ListNode* newNode = new ListNode();
newNode->key = i;
newNode->next = NULL;
current->next = newNode;
current = newNode;
}
return pHead;
}
void printListReverse_stack(ListNode* pHead) /// 用栈实现
{
std::stack<ListNode*> nodes;
ListNode* pNode = pHead;
while(pNode != NULL)
{
nodes.push(pNode);
pNode = pNode->next;
}
while(!nodes.empty())
{
pNode = nodes.top();
cout << pNode->key << " ";
nodes.pop();
}
}
void printListReverse_recursion(ListNode* pHead) /// 递归实现
{
if(pHead != NULL)
{
if(pHead->next != NULL)
{
printListReverse_recursion(pHead->next);
}
cout << pHead->key << " ";
}
}
int main()
{
ListNode* head = createList(10);
ListNode* test = new ListNode();
test->key = 0;
test->next = NULL;
cout << "stack:" << endl;
printListReverse_stack(head);
cout << endl << "recursion:" << endl;
printListReverse_recursion(head);
return 0;
}