面试题6:从尾到头打印链表
题目:输入一个列表的头结点,从尾到头答应出每个节点的值
- 用栈一个一个存入,再从栈中取出打印
- 递归本质上就是一个栈
#include "stdafx.h"
#include "List.h"
#include <stack>
#include <iostream>
void PrintListNode(ListNode*pnode);
void PrintListReversingly_Iteratively(ListNode*pHead)
{
if (pHead == nullptr)
return;
std::stack<ListNode*>stackoflistnode;
ListNode*ptemp = pHead;
while (ptemp != nullptr)
{
stackoflistnode.push(ptemp);
ptemp=ptemp->m_pNext;
}
while (!stackoflistnode.empty())
{
PrintListNode(stackoflistnode.top());
stackoflistnode.pop();
}
}
void PrintListReversingly_Recursively(ListNode*pHead)
{
if (pHead != nullptr)
{
PrintListReversingly_Recursively(pHead->m_pNext);
PrintListNode(pHead);
}
}
void PrintListNode(ListNode*pnode)
{
if (pnode!=nullptr)
{
std::cout << pnode->m_nValue << std::endl;
}
}
void Test(ListNode* pHead)
{
PrintList(pHead);
PrintListReversingly_Iteratively(pHead);
printf("\n");
PrintListReversingly_Recursively(pHead);
}
void Test1()
{
printf("\nTest1 begins.\n");
ListNode* pNode1 = CreateListNode(1);
ListNode* pNode2 = CreateListNode(2);
ListNode* pNode3 = CreateListNode(3);
ListNode* pNode4 = CreateListNode(4);
ListNode* pNode5 = CreateListNode(5);
ConnectListNodes(pNode1, pNode2);
ConnectListNodes(pNode2, pNode3);
ConnectListNodes(pNode3, pNode4);
ConnectListNodes(pNode4, pNode5);
Test(pNode1);
DestroyList(pNode1);
}
void Test2()
{
printf("\nTest2 begins.\n");
ListNode* pNode1 = CreateListNode(1);
Test(pNode1);
DestroyList(pNode1);
}
void Test3()
{
printf("\nTest3 begins.\n");
Test(nullptr);
}
int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
return 0;
}