劍指-OFFER_5 輸入一個連結串列的頭節點,從尾到頭列印連結串列每個節點的值。
阿新 • • 發佈:2018-12-19
題源:
-
輸入一個連結串列的頭節點,從尾到頭列印連結串列每個節點的值。
package Chap2; /** * 輸入一個連結串列的頭節點,從尾到頭列印連結串列每個節點的值。 */ import java.util.ArrayList; import java.util.LinkedList; public class FromTail2head { //節點類的定義 private class ListNode { int val; ListNode next=null; public ListNode(int val) { this.val=val; } } /** * 方法一:正序壓入,逆序彈出 * @param listNode 連結串列的頭結點 * @return 從頭到尾列的節點 */ public ArrayList<Integer> printListFromTailToHead(ListNode listNode){ LinkedList<Integer> stack=new LinkedList<>(); for(ListNode node=listNode;node!=null;node=node.next) { stack.push(node.val); } return new ArrayList<Integer>(stack); } /** * 方法二:利用遞迴 * 先遞迴到最後一個節點開始依次犯規,列表如果很長不適合遞迴,深度將很大 */ private ArrayList<Integer> a = new ArrayList<>(); public ArrayList<Integer> printListFromTailToHead2(ListNode listNode) { if(listNode!=null) { printListFromTailToHead(listNode.next); a.add(listNode.val); } return a; } }