栈(链表实现)

package LinkStack;

public class LinkStack {
    Node top=null;

    //栈空
    public boolean isEmpty(){
        return top==null;
    }
   //入栈
    public void push(Node node){
        //如果是第一个节点
        if (top==null){
            top=node;
        }else {
            Node pre=top;
            top.setNext(node);//连接下一个结点
            top=node;//top后移
            top.setPre(pre);//连接上一个结点
        }
    }
    //出栈
    public Node pop(){
        if (isEmpty()){
            throw new RuntimeException("栈为空!");
        }
        Node node=top;
        //出栈
        top=top.getPre();//top指针移动
        top.setNext(null);
        return node;
    }
    //打印
    public void list(){
        if (isEmpty()){
            System.out.println("栈为空!");
            return;
        }
        Node temp=top;
        while (temp!=null){
            //从栈顶打印!
            System.out.println(temp);
            temp=temp.getPre();
        }
    }
}
//链表结点
class Node{
    private int no;
    private Node next;
    private Node pre;//便于出栈!

    public Node(int no){
        this.no=no;
    }
    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }

    @Override
    public String toString() {
        return "Node{" +
                "no=" + no +
                '}';
    }

    public Node getPre() {
        return pre;
    }

    public void setPre(Node pre) {
        this.pre = pre;
    }
}

package LinkStack;

public class LinkStackDemo {
    public static void main(String[] args) {
        Node node1=new Node(1);
        Node node2=new Node(2);
        Node node3=new Node(3);
        Node node4=new Node(4);
        Node node5=new Node(5);
        LinkStack stack=new LinkStack();
        //入栈
        stack.push(node1);
        stack.push(node2);
        stack.push(node3);
        stack.push(node4);
        stack.push(node5);
        stack.list();
        //出栈
        System.out.println(stack.pop());
       System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println("出栈后----------");
        stack.list();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值