描述
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
如输入{1,2,3}的链表如下图:
返回一个数组为[3,2,1]
0 <= 链表长度 <= 10000
示例1
输入:
{1,2,3}
复制返回值:
[3,2,1]
代码
public class JZ6 {
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> ints = new ArrayList<>(); //新建一个数组
int length = 0,i = 0; //长度和计数器
ListNode next = listNode; //listNode缓存
if(listNode==null) return ints; //判空()
ints.add(new Integer(0)); //数组先加一位(重要)
do{
ints.add(new Integer(0)); //数组加一
i++; //计数加一
next = next.next; //指向后继
}
while(next.next!=null); //当listNode有后继时
length = i+1; //长度为计数器最终加一(重要)
i = 0; //计数器重置
next = listNode; //读入缓存
while(i<length){ //当计数器小于长度
i++;
ints.set((length-i),next.val); //替换
next = next.next; //指向后继
}
return ints;
}
}
}
结果
示例1
自测通过
运行时间17ms
占用内存9772KB
异常
处理异常的用例
用例输入 {}
预期输出 []
实际输出
执行出错
请检查是否存在数组越界等非法访问情况
java.lang.NullPointerException