劍指offer[從尾到頭列印連結串列]
阿新 • • 發佈:2018-11-24
劍指offer[從尾到頭列印連結串列]
題目描述
輸入一個連結串列,按連結串列值從尾到頭的順序返回一個ArrayList。
思路
因為要求是從尾到頭列印,所以可以利用棧先進後出的特點
程式碼
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.Stack;
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> stack = new Stack<>();
ArrayList<Integer> list = new ArrayList<>();
while (listNode != null) {
stack.push(listNode.val);
listNode = listNode.next;
}
while (!stack.isEmpty()) {
list.add(stack.pop());
}
return list;
}
}
細節知識
- 關於連結串列
- 每個連結串列都包括一個LinikedList物件和許多Node物件,LinkedList物件通常包含頭和尾節點的引用,分別指向連結串列的第一個節點和最後一個節點。而每個節點物件通常包含資料部分data,以及對上一個節點的引用prev和下一個節點的引用next,只有下一個節點的引用稱為單向連結串列,兩個都有的稱為雙向連結串列。next值為null則說明是連結串列的結尾,如果想找到某個節點,我們必須從第一個節點開始遍歷,不斷通過next找到下一個節點,直到找到所需要的。棧和佇列都是ADT,可以用陣列來實現,也可以用連結串列實現。
- 關於stack
- Stack實際上也是通過陣列去實現的。
執行push時(即,將元素推入棧中),是通過將元素追加的陣列的末尾中。
執行peek時(即,取出棧頂元素,不執行刪除),是返回陣列末尾的元素。
執行pop時(即,取出棧頂元素,並將該元素從棧中刪除),是取出陣列末尾的元素,然後將該元素從陣列中刪除。
- Stack實際上也是通過陣列去實現的。