題目
輸入一個鏈表的頭節點,從尾到頭反過來返回每個節點的值(用數組返回)。
示例 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 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(不包括)之間的部分視圖 |