题目:
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思路:
方法1:利用栈先进后出的特性
先从头到尾扫描链表,将其入栈,然后将栈元素弹出。
方法2:利用递归的特性
代码:
在线测试OJ:
https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&tqId=11156&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
AC代码:
方法1:
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> result;
if(head==NULL)
return result;
stack<int> temp;
ListNode* p = head;
while(p)
{
temp.push(p->val);
p = p -> next;
}
while(!temp.empty())
{
result.push_back(temp.top());
temp.pop();
}
return result;
}
};
方法2:
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> result;
if(head==NULL)
return result;
recursivePrint(head, result);
return result;
}
void recursivePrint(ListNode* p, vector<int> &result){
if(p==NULL) //到尾节点后一节点返回
{
return;
}
recursivePrint(p->next, result); //没有到尾节点后一节点,继续往后递归
result.push_back(p->val); //返回之后将当前的值存入result
}
};