你凭什么让别人相信你?

[AcWing]17. 从尾到头打印链表

输入一个链表的头结点,按照 从尾到头 的顺序返回节点的值。

返回的结果用数组存储。

数据范围

0 ≤ 链表长度 ≤ 1000

样例

1
2
输入:[2, 3, 5]
返回:[5, 3, 2]

算法思想

最简单的方法就是,直接遍历链表,然后存入vector,再利用库函数将其反转输出。
所以此处只写一下,递归函数法。
还是利用递归栈,出栈的时候将节点值塞入vector,这样就是逆序的了。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
vector<int> res;

void dfs(ListNode * head){
// 出口
if(!head) return;
// 找到尾
dfs(head -> next);
// 从尾到头放入res
res.push_back(head -> val);
}

vector<int> printListReversingly(ListNode* head) {
dfs(head);
return res;
}
};