如题:
题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
刚到手,想到的是反转链表,然后顺序打印。不过这样会改变原有链表。不过这道题最好的解法是利用递归或者栈,一样的道理。遍历链表,从尾到头,听起来和栈的元素访问顺序一致。因此,可以遍历链表,元素入栈,然后再出栈访问即可。此为方法1.
方法2是使用递归,先访问下一个元素,再访问自身。值得注意的是,凡是递归写法,一般都可以改成栈写法。
下面是c++的栈解法:
//解法,遍历链表,将元素保存到栈中,然后将栈中每个元素放到vector中
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
stack<int> st;
vector<int> vec;
ListNode *curNode = head;
//特殊情况处理
if (head == NULL)
return vec;
//遍历head,入栈
while(curNode)
{
st.push(curNode->val);
curNode = curNode->next;
}
//出栈
while (!st.empty())
{
vec.push_back(st.top());
st.pop();
}
return vec;
}
};
=============================================================================================
Linux应用程序、内核、驱动、后台开发交流讨论群(745510310),感兴趣的同学可以加群讨论、交流、资料查找等,前进的道路上,你不是一个人奥^_^。