题目描述
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
题目直达
解法1—直接遍历链表,最后翻转整个数组,返回一个数组的逆序
class Solution
{
public:
vector<int> reversePrint(ListNode* head)
{
vector<int>result;
while(head)
{
result.push_back(head->val);
head = head->next;
}
// return vector<int>(result.rbegin(),result.rend()) 返回一个逆序
reverse(result.begin(),result.end());
return result; //逆序
}
};
解法2—递归
由于这个题目需要我们从后面向前面开始打印这个数组。所以我们可以对遍历的结点进行一个递归,我们先递归到这个链表的最后面,然后不断向前收集权值。
class Solution
{
public:
vector<int>result;
void dfs(ListNode* node)
{
if(nullptr == node)
return; //递归出口,当前节点为空则退出
dfs(node->next); //对当前节点进行递归,一直到链表的最后一个节点
result.push_back(node->val); //最先调用该行代码的node就是链表最后一个节点,接着就是倒数第二个节点....
}
vector<int> reversePrint(ListNode* head)
{
dfs(head);
return result;
}
};