面试题4:从尾到头打印链表
2013-07-18 21:34
239 查看
方法一:利用栈实现
C++代码:
#include "stdafx.h" #include <iostream> #include <stack> using namespace std; //链表中的结点类型 struct ListNode { int m_nKey; ListNode *m_pNext; }; //从尾到头打印链表 void PrintLinkedListReversely(ListNode *pHead) { stack<ListNode *> tempStack; if (pHead != NULL) { ListNode *pCurrent = pHead; ListNode *pStackNode = NULL; while (pCurrent != NULL) { tempStack.push(pCurrent); pCurrent = pCurrent->m_pNext; } while (!tempStack.empty()) { pStackNode = tempStack.top(); cout << pStackNode->m_nKey << " "; tempStack.pop(); } cout << endl; } }
方法二:递归实现
C++代码:
#include "stdafx.h" #include <iostream> #include <stack> using namespace std; //链表中的结点类型 struct ListNode { int m_nKey; ListNode *m_pNext; }; //从尾到头打印链表 void PrintLinkedListReversely(ListNode *pHead) { if (pHead != NULL) { if (pHead->m_pNext != NULL) { PrintLinkedListReversely(pHead->m_pNext); } cout << pHead->m_nKey << " "; } } int _tmain(int argc, _TCHAR* argv[]) { bool isHeadNode = true; ListNode *pHeadNode = NULL; ListNode *pListNode = NULL; ListNode *pCurrentTail = NULL; while (1) { if (isHeadNode) { pHeadNode = new ListNode(); cin >> pHeadNode->m_nKey; pHeadNode->m_pNext = NULL; pCurrentTail = pHeadNode; isHeadNode = false; } else { pListNode = new ListNode(); cin >> pListNode->m_nKey; if (pListNode->m_nKey == -1) { break; } pListNode->m_pNext = NULL; pCurrentTail->m_pNext = pListNode; pCurrentTail = pListNode; } } PrintLinkedListReversely(pHeadNode); ListNode *pNode = pHeadNode; ListNode *pNext = NULL; while (pNode != NULL) { pNext = pNode->m_pNext; delete pNode; pNode = pNext; } system("pause"); return 0; }基于递归的代码很简洁,但它存在缺点:当链表非常长的时候就会导致函数调用的层级很深,从而有可能导致栈溢出。显然相比方法一用栈基于循环实现的代码的鲁棒性更好些。
相关文章推荐
- 面试题5:从尾到头打印链表
- 剑指offer 面试题5 从尾到头打印链表 java版答案
- 面试题5:从尾到头打印链表
- 剑指offer 面试题5 从尾到头打印链表(栈实现)
- 剑指offer——面试题5:从尾到头打印链表
- 【练习笔记】剑指offer-面试题5 :从尾到头打印链表
- 【面试题005】从尾到头打印链表
- 剑指Offer学习之面试题5 : 从尾到头打印链表
- 剑指offer-面试题5-从尾到头打印链表
- 剑指offer 面试题5 从尾到头打印链表
- 剑指offer-面试题5.从尾到头打印链表
- 剑指offer面试题5——链表之从尾到头打印链表
- 【剑指Offer面试题】 九度OJ1511:从尾到头打印链表
- 剑指offer--面试题5:从尾到头打印链表--Java实现
- 前端常见算法面试题之 - 从尾到头打印链表[JavaScript解法]
- 【剑指offer】 面试题5: 从尾到头打印链表
- 剑指offer面试题5 从尾到头打印链表(java实现)
- 面试题5:从尾到头打印链表
- 面试题5-从尾到头打印链表
- 面试题5:从尾到头打印链表