題目描述
輸入一個鏈表,按鏈表值從尾到頭的順序返回一個ArrayList。
解題思路
一種方法是利用棧來實現;
另外一種方法是利用三個指針把鏈表反轉,關鍵是 r 指針保存斷開的節點。
代碼實現
import java.util.ArrayList;
import java.util.Stack;
//這部分是利用棧來實現的。
public class Problem06a {
public class ListNode{
int val;
ListNode next = null;
ListNode(int val){
this.val = val;
}
}
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if (listNode == null)
return new ArrayList<>();
Stack<Integer> stack = new Stack<>();
ArrayList<Integer> arrayList = new ArrayList<>();
while(listNode != null){
stack.push(listNode.val);
listNode = listNode.next;
}
while(!stack.isEmpty()){
arrayList.add(stack.pop());
}
return arrayList;
}
}
代碼總結
根據題目要求,發現是典型的“後進先出”,則想到利用棧來實現。
還可以通過反轉指針來實現,反轉指針的代碼過幾天放上來。