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 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。