给出一个链表的头节点,从尾部逆序打印链表。
这里有2中实现思路,一种是用stack,先从头节点开始,依次把链表节点入栈,然后再依次弹出。
第二种思路是递归,实际递归的本质也是用栈来实现的。
ListCommon.h 依赖 :链表基本操作的函数实现。(1)
#include <iostream>
#include <stack>
#include "ListCommon.h"
using namespace std;
//用stack实现
void printListReverseByStack(ListNode* pHead){
stack<ListNode*> nodes;
ListNode* pNode = pHead;
cout << "by stack --";
while(pNode !=NULL){
nodes.push(pNode);
pNode = pNode->m_pNext;
}
while(!nodes.empty()){
pNode = nodes.top();
cout << pNode->m_nValue<< " , ";
nodes.pop();
}
cout << endl;
}
//通过递归实现
void printListReverseByRecursion(ListNode* pHead){
ListNode* pNode = pHead;
if(pNode != NULL){
if(pNode->m_pNext != NULL){
printListReverseByRecursion(pNode->m_pNext);
}
cout << pNode->m_nValue << " ; ";
}
}
int main(int argc,char* argv[]){
//创建链表
ListNode* pNode1= CreateListNode(1);
ListNode* pNode2= CreateListNode(2);
ListNode* pNode3= CreateListNode(3);
ListNode* pNode4= CreateListNode(4);
ConnectListNodes(pNode1,pNode2);
ConnectListNodes(pNode2,pNode3);
ConnectListNodes(pNode3,pNode4);
printListReverseByStack(pNode1);
printListReverseByRecursion(pNode1);
DestoryList(pNode1);
return 0;
}
测试结果:
PC:~/algorithm$ g++ ListCommon.cpp PrintListReverse.cpp -o PrintListReverse
PC:~/algorithm$ ./PrintListReverse
by stack --4 , 3 , 2 , 1 ,
4 ; 3 ; 2 ; 1 ;