剑指Offer面试题5:从尾到头打印链表---java实现

面试题5:从尾到头打印链表

                 输入一个链表的头结点,从尾到头反过来打印出每个结点的值。

题目分析:

     一个链表,给定头结点,从尾到头打印,符合先进后出的原则,也就是说,用栈的操作来实现。

链表的具体实现留个传送门链表实现,这里用API实现的了(当然这好像不是重点)

栈的具体实现留个传送门栈的实现,当然下面也有一种实现。

代码实现:

package com.no5;

import java.util.LinkedList;

/**
 * 剑指offer---面试题5:从尾到头打印链表 //输入一个链表的头结点,从尾到头反过来打印出每个结点的值
 * 
 * @author yushen
 * 
 */
public class PrintList {
	public static void main(String[] args) {
		// 定义一个链表
		LinkedList list = new LinkedList<>();
		// 对链表进行初始化
		list.addFirst(9);
		list.addFirst(8);
		list.addFirst(7);
		list.addFirst(6);
		list.addFirst(5);
		list.addFirst(4);
		list.addFirst(3);
		list.addFirst(2);
		list.addFirst(1);
		list.addFirst(0);

		// 现在链表的头结点是0,经过出入栈操作,将链表从尾到头输出
		printList(list, 0);
	}

	/**
	 * 从尾到头打印链表
	 * 
	 * @param list
	 * @param i
	 */
	private static void printList(LinkedList list, int index) {
		MyStack stack = new MyStack(list.size());
		for (int i = 0; i < list.size(); i++) {
			if (!stack.isFull()) {
				stack.push(list.get(i));
			}
		}

		// 出栈
		while (!stack.isEmpty()) {
			System.out.print(stack.pop() + " ");
		}
	}
}

栈的实现:

package com.no5;

/**
 * 栈的实现---数组实现
 */
public class MyStack {

	private int maxSize;
	private int top;
	private int[] arr;

	/**
	 * 栈的初始化
	 * 
	 * @param size
	 */
	public MyStack(int size) {
		maxSize = size;
		top = -1;
		arr = new int[maxSize];
	}

	/**
	 * 压栈
	 * 
	 * @param value
	 */
	public void push(int value) {
		arr[++top] = value;
	}

	/**
	 * 弹栈
	 * 
	 * @return
	 */
	public int pop() {
		return arr[top--];
	}

	/**
	 * 访问栈顶元素
	 * 
	 * @return
	 */
	public int peek() {
		return arr[top];
	}

	/**
	 * 判断是否栈满
	 * 
	 * @return
	 */
	public boolean isFull() {
		return maxSize - 1 == top;
	}

	/**
	 * 判断栈是否为空
	 * 
	 * @return
	 */
	public boolean isEmpty() {
		return top == -1;
	}

}

 

你可能感兴趣的:(剑指offer)