老师,为什么这个把tail给head后,head还是空啊
1 | public class LinkedListQueue<E> implements Queue<E> {<br> @Override <br> public int getSize() {<br> return size;<br> }<br><br> @Override <br> public void enQueue(E e) {<br> if (tail == null ) {<br> tail = new Node(e);<br> head = tail;<br> } else {<br> tail.next = new Node(e);<br> tail = tail.next;<br> }<br> size++;<br> }<br><br> @Override <br> public E deQueue() {<br> if (size == 0 ) {<br> throw new IllegalArgumentException( "deQueue failed.The queue is empty" );<br> }<br> Node retNode = head;<br> head = head.next;<br> retNode.next = null ;<br> if (head == null ) {<br> tail = null ;<br> }<br> size--;<br> return retNode.e;<br> }<br><br> @Override <br> public E getHead() {<br> if (size == 0 ) {<br> throw new IllegalArgumentException( "getHead failed.The queue is null" );<br> }<br> return head.e;<br> }<br><br> @Override <br> public E getTail() {<br> return tail.e;<br> }<br><br> @Override <br> public String toString() {<br> StringBuilder builder = new StringBuilder();<br> builder.append( "队首" );<br> Node cur = head;<br> while (head != null ) {<br> builder.append( "<-" + head.e);<br> head = head.next;<br> }<br> builder.append( "<-队尾" );<br> return builder.toString();<br> }<br><br><br> @Override <br> public boolean isEmpty() {<br> return size == 0 ;<br> }<br><br> private class Node {<br> public E e;<br> public Node next;<br><br> public Node() {<br><br> }<br><br> public Node(E e, Node next) {<br> this .e = e;<br> this .next = next;<br> }<br><br> public Node(E e) {<br> this (e, null );<br> }<br><br> @Override <br> public String toString() {<br> return this .e.toString();<br> }<br> }<br><br> private int size;<br> private Node head;<br> private Node tail;<br><br> public LinkedListQueue() {<br><br> }<br><br>}<br> |
49
收起
正在回答
1回答
如果真的执行到了你蓝框的语句,head 不应该为空了。
如果你测试 head 为空,要么根本没有执行这句;要么后续的逻辑又把 head 给修改了。
实际使用你的测试用例一步一步调试跟踪一下,看到底在哪里,你的 head 变成空了?
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧