8.1:双向链表实现双端队列

8.1:双向链表实现双端队列

  双端队列,玩的head 和tail指针

       底层都是双链表调整

 

 

  1、双向链表

 

复制代码
节点
1
public static class Node<T> { 2 public T value; 3 public Node<T> last; 4 public Node<T> next; 5 6 public Node(T data) { 7 value = data; 8 } 9 }
复制代码

 

复制代码
 双向链表实现节点定义

1
public static class DoubleEndsQueue<T> { 2 public Node<T> head; 3 public Node<T> tail; 4 5 public void addFromHead(T value) { 6 Node<T> cur = new Node<T>(value); 7 if (head == null) { 8 head = cur; 9 tail = cur; 10 } else { 11 cur.next = head; 12 head.last = cur; 13 head = cur; 14 } 15 } 16 17 public void addFromBottom(T value) { 18 Node<T> cur = new Node<T>(value); 19 if (head == null) { 20 head = cur; 21 tail = cur; 22 } else { 23 cur.last = tail; 24 tail.next = cur; 25 tail = cur; 26 } 27 } 28 29 public T popFromHead() { 30 if (head == null) { 31 return null; 32 } 33 Node<T> cur = head; 34 if (head == tail) { 35 head = null; 36 tail = null; 37 } else { 38 head = head.next; 39 cur.next = null; 40 head.last = null; 41 } 42 return cur.value; 43 } 44 45 public T popFromBottom() { 46 if (head == null) { 47 return null; 48 } 49 Node<T> cur = tail; 50 if (head == tail) { 51 head = null; 52 tail = null; 53 } else { 54 tail = tail.last; 55 tail.next = null; 56 cur.last = null; 57 } 58 return cur.value; 59 } 60 61 public boolean isEmpty() { 62 return head == null; 63 } 64 65 }
复制代码

 

复制代码
定义双端队列
1
public static class MyQueue<T> { 2 private DoubleEndsQueue<T> queue; 3 4 public MyQueue() { 5 queue = new DoubleEndsQueue<T>(); 6 } 7 8 public void push(T value) { 9 queue.addFromHead(value); 10 } 11 12 public T poll() { 13 return queue.popFromBottom(); 14 } 15 16 public boolean isEmpty() { 17 return queue.isEmpty(); 18 } 19 20 }
复制代码

 

posted @   yzmarcus  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示