版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/u012898245/article/details/81089975
面试题5:从尾到头打印链表
输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
题目分析:
一个链表,给定头结点,从尾到头打印,符合先进后出的原则,也就是说,用栈的操作来实现。
链表的具体实现留个传送门链表实现,这里用API实现的了(当然这好像不是重点)
栈的具体实现留个传送门栈的实现,当然下面也有一种实现。
代码实现:
package com.no5;
import java.util.LinkedList;
/**
* 剑指offer---面试题5:从尾到头打印链表 //输入一个链表的头结点,从尾到头反过来打印出每个结点的值
*
* @author yushen
*
*/
public class PrintList {
public static void main(String[] args) {
// 定义一个链表
LinkedList<Integer> 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<Integer> 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;
}
}