劍指Offer_從尾到頭打印鏈表_03

題目描述

輸入一個鏈表,從尾到頭打印鏈表每個節點的值。

/*鏈表結構
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/

import java.util.ArrayList;
import java.util.Collections;
import java.util.Stack;
class ListNode
{
	int val;
	ListNode next = null;
	ListNode(int val)
	{
		this.val = val;
	}
}

public class Offer03 
{
	public static void main(String[] args)
	{
		ListNode[] node = new ListNode[10];
		for(int i = 0; i < 10; i++)
			node[i] = new ListNode(i);
		for(int i = 0; i < 9; i++)
			node[i].next = node[i+1];
		node[9].next = null;
		
		ArrayList<Integer> list = printListFromTailToHead3(node[0]);
		for(int i = 0; i < list.size(); i++)
		{
			System.out.println(list.get(i));
		}
	}
	
	public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) 
	{//解法一:遍歷鏈表,把鏈表中的值依次添加到ArrayList類型的列表裏;
		//然後逆序遍歷這個列表,將值依次添加到另一個ArrayList列表裏;
		ArrayList<Integer> list = new ArrayList<Integer>();
		ArrayList<Integer> list2 = new ArrayList<Integer>();
		while (listNode != null) 
		{
			list.add(listNode.val);
			listNode = listNode.next;
		}
		for (int i = list.size() - 1; i >= 0; i--) 
		{
			list2.add(list.get(i));
		}
		return list2;
	}
	
	public static ArrayList<Integer> printListFromTailToHead2(ListNode listNode) 
	{//解法二:遍歷鏈表,把鏈表中的值依次添加到ArrayList類型的列表裏;
		//利用java.util.Collections類提供的反轉集合函數,將列表逆序。
		ArrayList<Integer> list = new ArrayList<Integer>();
		Stack<Integer> stack = new Stack();
		
		while (listNode != null) 
		{
			stack.push(listNode.val);
			listNode = listNode.next;
		}
		
		while(!stack.isEmpty())
			list.add(stack.pop());
		
		return list;
	}
	
	public static ArrayList<Integer> printListFromTailToHead3(ListNode listNode) 
	{//解法三:遍歷鏈表,把鏈表中的值依次添加到stack類型的棧裏;
		//新建一個ArrayList類型的列表,依次添加從棧裏彈出來的值。
		ArrayList<Integer> list = new ArrayList<Integer>();
		while (listNode != null) 
		{
			list.add(listNode.val);
			listNode = listNode.next;
		}
		Collections.reverse(list);
		return list;
	}
	
	
}

查閱java文檔發現,java.util.stack類是遺留類,最好使用ArrayDeque類替代。

發佈了52 篇原創文章 · 獲贊 47 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章