从尾到头打印列表
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
分析
- 可以将数据保存到一个数组中,然后逆序遍历,加入 list
- 递归
代码
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
while (listNode != null){
// 使用 list 中的方法,每次都在第一次位置加入元素,底层使用 System.arraycopy,
// 将第一个位置及以后的数都向后移动,在吧新的数据插入到第一个位置
list.add(0,listNode.val);
listNode = listNode.next;
}
return list;
}
递归
public ArrayList<Integer> printListFromTailToHead1(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
// 递归的去添加元素
printListFromTailToHeadCore(list, listNode);
return list;
}
public void printListFromTailToHeadCore(ArrayList<Integer> list, ListNode listNode) {
// 递归结束条件
if (listNode == null){
return;
}
// 开始递归
printListFromTailToHeadCore(list, listNode.next);
// 将当前元素加入 list
list.add(listNode.val);
}