1. 程式人生 > >03、從尾到頭列印連結串列

03、從尾到頭列印連結串列

題目描述:

  輸入一個連結串列的頭結點,從尾到頭反過來列印每個結點的值。

解題思路:

  • 改變連結串列結構的話,先反轉連結串列,然後從頭到尾列印每個結點的值。(後續博文會有相關實現,這裡就暫不實現)。

  • 無需改變連結串列結構,由於連結串列是從頭到尾遍歷的,現在需要從尾到頭列印,是一個典型的先進後出模式。所以可以使用棧,遍歷整個連結串列,將結點依次入棧,然後再依次出棧,實現“先進後出”。

  • 無需改變連結串列結構,遞迴實現,如果連結串列結點數過多的話,可能會導致棧溢位。

Demo:

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
vector<int> printListFromTailToHead(ListNode* head) { stack<int> st; ListNode* p = head; while (p != NULL) { st.push(p->val); // 使用棧接收資料 p = p->next; } vector<int> vec; while (!st.empty()) { vec.push_back(st.top
()); st.pop(); } return vec; }

參考:http://www.cnblogs.com/AndyJee/p/4624417.html