美文网首页
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