题目
- 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例
- 示例1
- 输入:head = [1,3,2]
- 输出:[2,3,1]
代码
解法:
public int[] reversePrint(ListNode head) {
ListNode node = head;
int count = 0;
while (node != null) {
++count;
node = node.next;
}
int[] nums = new int[count];
node = head;
for (int i = count - 1; i >= 0; --i) {
nums[i] = node.val;
node = node.next;
}
return nums;
}
代码分析
:代码不算难,用迭代效率肯定是没问题的,下面再介绍另一种花里胡哨的写法。
- 其他优秀代码
解法:DFS
class Solution {
List<Integer> list = new ArrayList<>();
public int[] reversePrint(ListNode head) {
dfs(head);
int[] ans = new int[list.size()];
for(int i = 0; i < ans.length; i++) {
ans[i] = list.get(i);
}
return ans;
}
public void dfs(ListNode node) {
if (node == null) {
return;
}
dfs(node.next);
list.add(node.val);
}
}
代码分析
:1、通过dfs(ListNode node)
将链表中的元素逆序添加到list
中,注意写法:
public void dfs(ListNode node) {
if (node == null) {
return;
}
dfs(node.next);
list.add(node.val);
}
代码list.add(node.val);
是在dfs(node.next);
之后的,实现逆序添加。