题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
思路
- 是个简单题,不多说,即时是用栈、列表这些,其实反正最后要你返回数组,你还是得定义个数组来返回数据,别的不说你用栈、集合占用了空间,速度还没有我定义一个指针直接遍历一遍去看到底多长就把返回的数组定义好,然后再次遍历length自减逆向赋值完成解题。我觉得在没有要求必须用栈的情况下官方解还不如这个好。
代码
public int[] reversePrint(ListNode head) {
//先遍历一次算长度
int length = 0;
ListNode p = head;
while (p != null) {
p = p.next;
length++;
}
//根据长度定义要返回的数组并继续从头遍历返回
int[] ret = new int[length--];
p = head;
while (p != null) {
ret[length--] = p.val;
p = p.next;
}
return ret;
}