1. 程式人生 > >劍指offer[從尾到頭列印連結串列]

劍指offer[從尾到頭列印連結串列]

劍指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時(即,取出棧頂元素,並將該元素從棧中刪除),是取出陣列末尾的元素,然後將該元素從陣列中刪除。