Skip to content

Latest commit

 

History

History
158 lines (125 loc) · 4.64 KB

08.用单向链表实现栈.md

File metadata and controls

158 lines (125 loc) · 4.64 KB

目录介绍

  • 01.题目要求
  • 02.问题分析
  • 03.实例代码
  • 04.一次遍历法

好消息

  • 博客笔记大汇总【15年10月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计N篇[近100万字,陆续搬到网上],转载请注明出处,谢谢!所有博客陆续更新到GitHub上!
  • 链接地址:https://github.com/yangchong211/YCBlogs
  • 如果觉得好,可以star一下,谢谢!当然也欢迎提出建议,万事起于忽微,量变引起质变!

01.题目要求

  • 用单向链表实现栈

02.问题分析

2.1 一句话概括

2.2 解题思路

  • 栈的pop()方法和push()方法,对应于链表的在头部删除元素deleteHead()以及在头部增加元素addHead()。

03.实例代码

public class MyStack {
    class Node {// 定义节点
        private Node next;
        public Object value;
    }

    Node top = null;

    void init() {//初始话头结点
        top = new Node();
        top.next = null;
        top.value = null;
    }

    public void push(Object element) {//采用头插发的方式模拟入栈
        Node e = new Node();
        e.value = element;
        if (top.next == null) {
            top.next = e;
        } else {
            e.next = top.next;
            top.next = e;

        }

    }

    public Object pop() {//弹出栈顶元素,也就是头结点后面的第一个元素
        Object ele = null;
        if (top.next == null) {
            System.out.println("栈为空!");
        } else {
            ele = top.next.value;
            top.next = top.next.next;//移动指针。相当于删除链表中第一个元素
        }
        return ele;
    }
 
    public Object peek()//返回栈顶元素,不执行出栈操作
    {
        if(top.next==null)
        {
            return -1;
        }
        else
        return top.next.value;
    }
    public boolean isempty()//判断栈是否为空
    {
        return top.next==null?true:false;
    }
    public int size() {//返回栈的大小,含有的元素个数
        Node temp = top;
        int i = 0;
        while (temp.next != null) {
            i++;
            temp = temp.next;
        }
        return i;
    }

    public void print() {//打印栈中存在的元素
        Node temp = top;
        if(temp.next==null)
        {
            System.out.println("栈为空!");
        }
        while (temp.next != null) {
            System.out.print(temp.next.value + "  ");
            temp = temp.next;
        }
    }

    public static void main(String[] args) {
        MyStack stack = new MyStack();
        stack.init();
        for (int i = 0; i < 5; i++) {
            stack.push(i);
        }
        /*Object ele1 = stack.pop();
        Object ele2 = stack.pop();
        Object ele3 = stack.pop();
        Object ele4 = stack.pop();
        Object ele5 = stack.pop();
        System.out.println(ele1);
        System.out.println(ele2);
        System.out.println(ele3);
        System.out.println(ele4);
        System.out.println(ele5);*/
        Object ele1 = stack.pop();
        System.out.println("此次弹出的元素为:"+ele1);
        System.out.print("栈中剩余的元素为:");
        stack.print();
        System.out.println();
        System.out.println("栈顶元素为:"+stack.peek());
    }
}

其他介绍

01.关于博客汇总链接

02.关于我的博客