链表能够很好的实现堆栈,与数组相比,链表有更好的伸缩性。文章这里提供了有以下几个方法,入栈使用的是push(),返回栈顶元素是peek(),pop()表示返回栈顶且删除,display则是展示所有元素。isEmpty()盘算链表是否为空
/**
*@Author swyee
*@Date 17:44 2020/7/18
**/
import java.util.Scanner;
public class MyStack {
private Node root;
MyStack() { }
// 入栈操作
public void push(Object val)
{
Node node = new Node(val);
if(root==null){//判断是否有节点
root=node;
}else{
node.next=root;
root=node;
}
}
// 定义一个函数判断栈是否为空(链表是否为空)
public boolean isEmpty()
{
return root == null;
}
// 返回栈顶元素,但不删除
public Object peek()
{
if(isEmpty()) {
throw new RuntimeException("栈是空的!");
}
return root.value;
}
// 返回栈顶元素并删除
public void pop()
{
if(isEmpty()) {
throw new RuntimeException("栈是空的!");
}
root=root.next;
}
//展示所有元素
public void display()
{
for(Node n=root;n!=null;n=n.next){
System.out.print(n.value+" ");
}
}
}
// main方法
class stack {
public static void main(String[] args)
{
MyStack stackUsingLinkedlist = new MyStack();
System.out.println("push:3,5,6,4,3,8");
stackUsingLinkedlist.push(3);
stackUsingLinkedlist.push("aaa");
stackUsingLinkedlist.push(5);
stackUsingLinkedlist.push(6);
stackUsingLinkedlist.push(4);
stackUsingLinkedlist.push(3);
stackUsingLinkedlist.push(8);
System.out.println();
System.out.println("display()");
stackUsingLinkedlist.display();
System.out.println();
System.out.println("peek()");
Object peek = stackUsingLinkedlist.peek();
System.out.println(peek);
System.out.println("display()");
stackUsingLinkedlist.display();
System.out.println();
System.out.println("pop()");
stackUsingLinkedlist.pop();
System.out.println("display()");
System.out.println();
stackUsingLinkedlist.display();
}
}
//链表结构
class Node {
Object value;
Node next;
public Node(Object value) {
super();
this.value = value;
}
}