链表能够很好的实现堆栈,与数组相比,链表有更好的伸缩性。文章这里提供了有以下几个方法,入栈使用的是push(),返回栈顶元素是peek(),pop()表示返回栈顶且删除,display则是展示所有元素。isEmpty()判断链表是否为空
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+" ");
}
}
}
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;
}
}