1. 程式人生 > >劍指-OFFER_5 輸入一個連結串列的頭節點,從尾到頭列印連結串列每個節點的值。

劍指-OFFER_5 輸入一個連結串列的頭節點,從尾到頭列印連結串列每個節點的值。

題源:

  • 輸入一個連結串列的頭節點,從尾到頭列印連結串列每個節點的值。

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;
	}
}