1. 程式人生 > >劍指Offer(java+第五題,從尾到頭列印連結串列)

劍指Offer(java+第五題,從尾到頭列印連結串列)

思路:藉助棧實現,或使用遞迴的方法。

程式碼實現:

import java.util.ArrayList;
import java.util.Stack;

//定義連結串列結構,如果這部分程式碼放到類Offer05裡面就會報錯;如果非把ListNode放到類Offer05裡面就要在class ListNode{...}前面加上static
class ListNode{
	ListNode next;
	int val;
}

public class Offer05 {

	public ArrayList<Integer> printListFromTailToHead(ListNode listNode){
		ArrayList<Integer> list = new ArrayList<>();
		if(listNode == null)
			return list;
		Stack<ListNode> stack = new Stack<>();
		while(listNode != null){
			stack.push(listNode);
			listNode = listNode.next;
		}
		
		while(!stack.isEmpty()){
			list.add(stack.pop().val);
		}
		return list;
	}

	public static void main(String[] args) {
		Offer05 of5 = new Offer05();
		//測試用例
		//1,功能測試(輸入的連結串列有多個節點,輸入的連結串列只有一個節點)
		ListNode node1 = new ListNode();
		ListNode node2 = new ListNode();
		ListNode node3 = new ListNode();
		node1.val = 1;
		node2.val = 2;
		node3.val = 3;
		node1.next = node2;
		node2.next = node3;
		System.out.println(of5.printListFromTailToHead(node1));
		
		ListNode node4 = new ListNode();
		node4.val = 4;
		System.out.println(of5.printListFromTailToHead(node4));
		
		//2,特殊輸入測試(輸入的連結串列頭節點指標為null)
		ListNode node5 = null;
		System.out.println(of5.printListFromTailToHead(node5));
	}
}

輸出結果