题目描述:
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
解题思路:
我觉得可以学的有两种思路,第一种是利用栈先入后出的特性,先将所有的元素压入一个栈中,再将栈顶元素依次存入数组中。
第二种就是递归。
第一种非递归法:
class Solution{
public:
vector<int> printListFromTailToHead(ListNode* head)
{
vector<int> list;
if(NULL == head) //代码的鲁棒性
return list;
ListNode* p = head;
stack<int> stk; //创建一个栈用来存放链表中的元素
while(p)
{
stk.push(p->val); //将链表元素依次压入栈中
p = p->next;
}
while(! stk.empty()) //若栈不为空
{
list.push_back(stk.top());
stk.pop();
}
return list;
}
};
第二种递归:
class Solution{
public:
vector<int> list;
vector<int> printListFromTailToHead(ListNode* head)
{
ListNode* p = head;
if(p) //若当前结点不为空
{
if(p->next) //若当前结点不是尾结点
printListFromTailToHead(p->next);
list.push_back(p->val); //将结点中的元素存入数组中
}
return list;
}
};