題目

輸入一個鏈表的頭節點,從尾到頭反過來返回每個節點的值(用數組返回)。

示例 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 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

優質答案

    // 執行用時 : 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 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(不包括)之間的部分視圖