美文网首页
2019-08-16-使用链表的思想实现栈

2019-08-16-使用链表的思想实现栈

作者: 王元 | 来源:发表于2019-08-16 15:06 被阅读0次

栈的特点FILO,即先push的元素,最后才能pop出来

思路是链表的思路来实现(当然也可以使用数组,数组的话需要考虑扩容等等),直接上代码

/**
 * 栈的特点,FILO 先进的后出
 * @param <T> 栈内元素的类型
 */
public class MyStack<T> {

    /**
     * 保存栈内的元素,双向链表来实现
     * @param <T>
     */
    private static class Node<T> {
        private Node(T value) {
            this.value = value;
        }
        T value;
        Node<T> next;
        Node<T> pre;
    }

    private int elementCount = 0;

    private Node<T> head;
    private Node<T> last;

    /**
     * 读取最后一个push元素的值
     * @return
     */
    public T peek() {
        return last == null ? null : last.value;
    }

    /**
     * 出栈最后一个入栈的元素
     * @return
     */
    public T pop() {
        Node<T> node;
        if(last == null) {
            node = null;
        }
        else {
            node = last;
            last = last.pre;
            if(last != null) {
                last.next = null;
            }
        }
        if(elementCount > 0) {
            elementCount--;
        }
        return node == null ? null : node.value;
    }

    /**
     * push一个非空元素
     * @param item
     * @return
     */
    public T push(T item) {
        if(item == null)return null;
        if(head == null) {
            head = new Node<>(item);
            last = head;
        } else {
            Node<T> t = last;
            last.next = new Node<>(item);
            last = last.next;
            last.pre = t;
        }
        elementCount++;
        return item;
    }

    /**
     * 栈的长度
     * @return
     */
    public int size() {
        return elementCount;
    }
 }

相关文章

网友评论

      本文标题:2019-08-16-使用链表的思想实现栈

      本文链接:https://www.haomeiwen.com/subject/euxqsctx.html