双向链表实现栈和队列

1.双端队列类设计

public static class Node<T>{
       public T value;
       public Node<T> last;
       public Node<T> next;
       public Node(T data){
           value = data;
       }
   }
   //双向队列
   public static class DoubleEndsQueue<T>{
       public Node<T> head;
       public Node<T> tail;
       //1.从头部增加节点
       public void addFromHead(T value){
           Node<T> cur = new Node<>(value);
           if(head == null){
               head = cur;
               tail = cur;
           }else {
               cur.next = head;
               head.last = cur;
               head = cur;
           }
       }
       //2.从尾部增加节点
       public void addFromTail(T value){
           Node<T> cur = new Node<>(value);
           if(head == null){
               head = cur;
               tail = cur;
           }else {
               tail.next = cur;
               cur.last = tail;
               tail = cur;
           }
       }
       //3.从头部删除节点,并返回删除节点的值
       public T deleteFromHead(){
           //(1)判断是否为空
           if(head == null)
               return null;
           Node<T> cur = head;
           //(2)判断是否只有一个节点
           if(head == tail){
               head = null;
               tail = null;
           }else {
               head = head.next;
               cur.next = null;
               head.last = null;
           }
           return cur.value;
       }
       //4.从尾部删除节点,并返回删除节点的值
       public T deleteFromTail(){
           //(1)判断是否为空
           if(head == null)
               return null;
           Node<T> cur = head;
           //(2)判断是否只有一个节点
           if(head == tail){
               head = null;
               tail = null;
           }else {
              tail = tail.last;
              cur.last = null;
              tail.next = null;
           }
           return cur.value;
       }
       public boolean isEmpty(){
           return head == null;
       }
   }

2.栈的实现

  • 头部进,头部出
private static class DoubleQueueStack<T>{
       private DoubleEndsQueue<T> queue;

       public DoubleQueueStack() {
           queue = new DoubleEndsQueue<T>();
       }
       public void push(T value){
           queue.addFromHead(value);
       }
       public T pop(){
           return queue.deleteFromHead();
       }
       public boolean isEmpty(){
           return queue.isEmpty();
       }
   }

3.队列的实现

  • 头部进,尾部出
private static class DoubleQueue<T>{
       private DoubleEndsQueue<T> queue;
       public DoubleQueue(){
           queue = new DoubleEndsQueue<T>();
       }
       public void push(T value){
           queue.addFromHead(value);
       }
       public T pop(){
           return queue.deleteFromTail();
       }
       public boolean isEmpty(){
           return queue.isEmpty();
       }
   }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容