剑指Offer面试题:4.从尾到头打印链表
生活随笔
收集整理的這篇文章主要介紹了
剑指Offer面试题:4.从尾到头打印链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一 題目:從尾到頭打印鏈表
題目:輸入一個鏈表的頭結點,從尾到頭反過來打印每個結點的值。
代碼實現
采用兩種方法實現:
(1) 不修改原列表,使用stack的方式實現
(2)修改原列表,對元列表逆序
兩種方法都在下面的代碼中:
struct Node {int data;Node* pNext; };class ListEx { private:Node *m_pHead;Node *m_pTail; public:ListEx(){m_pHead = NULL;m_pTail = NULL;}~ListEx(){Node *pNode = m_pHead;Node *pNext = NULL;while(pNode){pNext = pNode->pNext;delete pNode;pNode = pNext;}m_pHead = NULL;m_pTail = NULL;}void add(int data){Node *pNode = new Node;pNode->data = data;pNode->pNext = NULL;if (!m_pHead){m_pTail = m_pHead = pNode;}m_pTail->pNext = pNode;m_pTail = pNode;}Node* GetHead() {return m_pHead;}// 改變鏈表的內容,將其逆序void ReserveList(){m_pTail = m_pHead;Node *p1 = m_pHead;Node *p2 = p1->pNext;p1->pNext = NULL; //關鍵位置Node *pTemp = NULL; while (p1 && p2){pTemp = p2->pNext; // 關鍵位置p2->pNext = p1;p1 = p2;p2 = pTemp;}m_pHead = p1;} };// 從尾打印鏈表 void PrintList(Node *pHead) {stack<int> NodeStack;Node *pNode = pHead;while (pNode){NodeStack.push(pNode->data);pNode = pNode->pNext;}while (!NodeStack.empty()){cout << NodeStack.top();NodeStack.pop();}cout << endl; }void main() {ListEx list;list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);list.add(6);list.add(7);list.add(8);list.add(9);Node *pHead = list.GetHead();cout << "不修改原列表,使用stack方法:" << endl;PrintList(pHead);list.ReserveList();cout << "修改原列表,將原列表逆序:" << endl;pHead = list.GetHead();PrintList(pHead);return; }轉載于:https://www.cnblogs.com/xiaobingqianrui/p/8808816.html
總結
以上是生活随笔為你收集整理的剑指Offer面试题:4.从尾到头打印链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 让代码颤抖
- 下一篇: python购物车模块