劍指Offer 06.從尾到頭列印連結串列
阿新 • • 發佈:2020-09-10
輸入一個連結串列的頭節點,從尾到頭反過來返回每個節點的值(用陣列返回)。
示例 1:
輸入:head = [1,3,2] 輸出:[2,3,1]
思路:一開始想的是:用一個List ,動態的記錄連結串列節點的值,但是 List 每一次 add( n ) 耗時太久,而且最後 List 轉為 int[ ] 頁不方便。
改進思路:利用 2 次遍歷,來換取 List 存值、以及最後取值放入 int[ ] 的開銷。
class Solution { public int[] reversePrint(ListNode head) { ListNode tmp = head;int count = 0; while(tmp != null){ count++; // 第一次遍歷,得到連結串列節點的個數 tmp = tmp.next; } int[] res = new int[count]; //申請同樣大小的陣列 while(head != null){ res[--count] = head.val; // 第二次遍歷,往數組裡面記錄值 head = head.next; } returnres; } }
從時間上來看,多遍歷一次還是划算的。