1 /* H tail
2 (last in) 1->2->3->4 (1st in)
3 o/H
4 first-out
5
6 */
7 public class UseLinkedListImplementQueue {
8 private ListNode head ;
9 private ListNode tail ;
10 private int length;
11
12 public UseLinkedListImplementQueue() {
13 head = null ;
14 tail = null ;
15 length = 0;
16 }
17
18 public void offer(int val){
19 ListNode node = new ListNode(val) ;
20 node.next = head ;
21 head = node ;
22 length++;
23 syncHeadAndTail();
24 }
25 // 1->2->3->4 to 1->2->3
26 public Integer poll(){
27 if (tail == null) return null;
28 int value = tail.val ;
29 ListNode curr = head ;
30 while (curr != null && curr.next != tail){
31 curr = curr.next ;
32 }
33 //now curr.next -> tail
34 curr.next = null ;
35 //move tail to curr
36 tail = curr ;
37 length-- ;
38 syncHeadAndTail();
39 return value ;
40 }
41
42 public Integer peek(){
43 if (tail == null) return null ;
44 return tail.val ;
45 }
46
47 public boolean isEmpty(){
48 return this.length <= 0 ;
49 }
50
51 public int getSize(){
52 return this.length ;
53 }
54
55 private void syncHeadAndTail(){
56 if (this.length == 0){
57 head = null ;
58 tail = null ;
59 }
60 if (this.length == 1){
61 tail = head ;
62 }
63 }
64
65 public static void main(String[] args) {
66 UseLinkedListImplementQueue queue = new UseLinkedListImplementQueue() ;
67 queue.offer(1);
68 queue.offer(2);
69 System.out.println(queue.poll());
70 queue.offer(3);
71 queue.offer(4);
72 System.out.println(queue.poll());
73 System.out.println(queue.poll());
74
75 }
![]()