03、從尾到頭列印連結串列
阿新 • • 發佈:2018-11-25
題目描述:
輸入一個連結串列的頭結點,從尾到頭反過來列印每個結點的值。
解題思路:
-
改變連結串列結構的話,先反轉連結串列,然後從頭到尾列印每個結點的值。(後續博文會有相關實現,這裡就暫不實現)。
-
無需改變連結串列結構,由於連結串列是從頭到尾遍歷的,現在需要從尾到頭列印,是一個典型的先進後出模式。所以可以使用棧,遍歷整個連結串列,將結點依次入棧,然後再依次出棧,實現“先進後出”。
-
無需改變連結串列結構,遞迴實現,如果連結串列結點數過多的話,可能會導致棧溢位。
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;
}