输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目要求反向输出链表每个节点的值,需要用数据返回,也就是说最后结果值应该存储到数组中。
我们可以利用递归,先访问到链表的最后一个节点,从最后一个节点开始加入到list中,这样list中节点为倒序,再遍历list加入数组中返回。
class Solution {
ArrayList<Integer> list = new ArrayList<>();
public int[] reversePrint(ListNode head) {
recursion(head);
//list大小初始化数组
int[] linkedVal = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
linkedVal[i] = list.get(i);
}
return linkedVal;
}
//递归
void recursion(ListNode nodeNext){
if(nodeNext == null)return;
recursion(nodeNext.next);
list.add(nodeNext.val);
}
}
也可以使用栈来存储,栈的特点是先入后出,遍历链表节点入栈,出栈相反,存入数组。