劍指offer第3題:
輸入一個鏈表,按鏈表值從尾到頭的順序返回一個ArrayList。
理解:
本題中的關鍵詞是從尾到頭,考察當遇到反向輸出時是否可以想到使用堆棧特性來輔助輸出。
現將所有節點都壓入堆棧,然後再依次彈出,此時彈出的順序就是從尾到頭的順序了。注意ArrayList中存放的是整型,而不是ListNode型,這點要注意,否則是錯的。
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
if(listNode == null){
return list; //如果第一個結點就是null,那麼就直接把新建的list返回
}
//利用堆棧的特點
Stack<ListNode> stack = new Stack<>();
while(listNode != null){ //將所有的結點依次壓入
stack.push(listNode);
listNode = listNode.next;
}
while(!stack.isEmpty()){ //全部壓入之後現在開始依次彈出,彈出的內容存到list當中
list.add(stack.pop().val);
}
return list; //注意返回類型正確
}
}
知識點:
- 使用ArrayList<>()要有“import java.util.ArrayList;”;
- 使用Stack<>()要有“import java.util.Stack;”;
- 向ArrayList中添加元素,使用add()方法;
- 堆棧壓入:xx.push(xxx);
- 堆棧彈出:xx.pop();
- 堆棧爲空:xx.isEmpty();