题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
我的答案
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int[] reversePrint(ListNode head) {
//创建一个动态的数组
ArrayList<Integer> a = new ArrayList<>();
//遍历链表,并且记录到a这个动态数组中
ListNode node =head;
while(node!=null){
a.add(node.val);
node=node.next;
}
int temp;
//逆置动态数组
for(int i=0,j=a.size()-1;i<(a.size())/2;i++,j--){
temp=a.get(i);
a.set(i,a.get(j));
a.set(j,temp);
}
//创建int[],用于返回参数
int[] d = new int[a.size()];
for(int i = 0;i<a.size();i++){
d[i] = a.get(i);
}
return d;
}
}
优质答案
// 执行用时 : 0 ms, 在所有 Java 提交中击败了 100.00% 的用户
// 内存消耗 : 39.8 MB, 在所有 Java 提交中击败了 100.00% 的用户
// 不使用栈,不使用递归
class Solution {
public static 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;
}
}
回顾一下ArrayList
方法 | 返回值 | 说明 |
---|
add(int index, E element) | void | 在列表的指定位置插入指定元素(可选操作) | addAll(int index, Collection<? extends E> c) | boolean | 将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作) | get(int index) | E | 返回列表中指定位置的元素 | indexOf(Object o) | int | 返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1 | lastIndexOf(Object o) | int | 返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1 | listIterator() | ListIterator | 返回此列表元素的列表迭代器(按适当顺序) | listIterator(int index) | ListIterator | 返回此列表元素的列表迭代器(按适当顺序),从列表的指定位置开始 | remove(int index) | E | 移除列表中指定位置的元素(可选操作) | set(int index, E element) | E | 用指定元素替换列表中指定位置的元素(可选操作) | subList(int fromIndex, int toIndex) | List | 返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图 |
|