5.從尾到頭列印連結串列(Java)
阿新 • • 發佈:2018-12-16
從尾到頭列印連結串列
-
題目描述
輸入一個連結串列,按連結串列值從尾到頭的順序返回一個ArrayList。
-
具體實現:
解法一:
解題思路:有點浪費空間的做法,需要建立兩個ArrayList物件,
- 用list來儲存連結串列中從頭到尾的資料,再把list中的資料反轉到list2中即是結果。
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> list2 = new ArrayList<Integer>();
while(listNode != null) {//先把連結串列的資料從頭到尾儲存在list中
list.add( listNode.val);
listNode = listNode.next;
}
for(int i = list.size()-1; i >= 0; i--) {//把list反轉到list2中
list2.add(list.get(i));
}
return list2;
}
解法二:
解題思路:優化做法,利用遞迴的特性,執行到中途呼叫遞迴直到出口再一個個返回來計算,這樣就可以完美地從連結串列的末尾開始取到資料。直接判斷當前結點是否為null,不為空就一直呼叫下一個結點,直到最後一個結點就開始新增資料到arrayList中,從連結串列的尾端一個一個地新增到arrayList中,最後結果就是返回這個arrayList即可。
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> arrayList=new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode != null) {
this.printListFromTailToHead(listNode.next);
arrayList.add(listNode.val);
}
return arrayList;
}
}