• 双向链表实现栈和队列



    /**
    * 双向链表实现栈和队列
    */
    public class DoubleEndsNodeToQueueAndStack {

    public static class MyQueue<T> {

    public DoubleEndsNode<T> nodes;

    public MyQueue() {
    nodes = new DoubleEndsNode();
    }

    public void push(T value) {
    nodes.addFromHead(value);
    }

    public T poll() {
    return nodes.popFromBottom();
    }

    public boolean isEmpty() {
    return nodes.isEmpty();
    }

    }

    public static class MyStack<T> {

    public DoubleEndsNode<T> nodes;

    public MyStack() {
    nodes = new DoubleEndsNode();
    }

    public void push(T value) {
    nodes.addFromHead(value);
    }

    public T pop() {
    return nodes.popFromHead();
    }

    public boolean isEmpty() {
    return nodes.isEmpty();
    }

    }

    public static class DoubleEndsNode<T> {

    public Node<T> head;

    public Node<T> tail;

    public void addFromHead(T value) {
    Node node = new Node(value);
    if (head == null) {
    head = node;
    tail = node;
    } else {
    node.next = head;
    head.pre = node;
    head = node;
    }
    }

    public void addFromBottom(T value) {
    Node node = new Node(value);
    if (head == null) {
    head = node;
    tail = node;
    } else {
    tail.next = node;
    node.pre = tail;
    tail = node;
    }
    }

    public T popFromHead() {
    if (head == null) {
    return null;
    }
    Node<T> node = head;
    if (head == tail) {
    head = null;
    tail = null;
    } else {
    head = head.next;
    head.pre = null;
    node.next = null;
    }
    return node.value;
    }

    public T popFromBottom() {
    if (head == null) {
    return null;
    }
    Node<T> node = tail;
    if (head == tail) {
    head = null;
    tail = null;
    } else {
    tail = tail.pre;
    tail.next = null;
    node.pre = null;
    }
    return node.value;
    }

    public boolean isEmpty() {
    return head == null;
    }

    }

    public static class Node<T> {

    public T value;

    public Node<T> pre;

    public Node<T> next;

    public Node(T node) {
    this.value = node;
    }

    }

    }

    /* 如有错误,欢迎批评指正 */
  • 相关阅读:
    Spring + mybatis 主从数据库分离读写的几种方式(二)
    Spring + mybatis 主从数据库分离读写的几种方式(一)
    AS3隐藏特性——深拷贝数据对象
    如何高效地抽离出两个数组中的相同元素
    资料合集2
    Trace类
    网页游戏心跳机制
    stage3d 你不知道的巨坑
    打包一组xml数据ByteArray
    利用BlendMode做镂空擦除效果
  • 原文地址:https://www.cnblogs.com/laydown/p/12791375.html
Copyright © 2020-2023  润新知