老师,为什么这个把tail给head后,head还是空啊

老师,为什么这个把tail给head后,head还是空啊

http://img1.sycdn.imooc.com//climg/601519b609a0865608110395.jpg

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>


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

如果真的执行到了你蓝框的语句,head 不应该为空了。


如果你测试 head 为空,要么根本没有执行这句;要么后续的逻辑又把 head 给修改了。


实际使用你的测试用例一步一步调试跟踪一下,看到底在哪里,你的 head 变成空了?


继续加油!:)

  • wukai001 提问者 #1

    http://img1.sycdn.imooc.com//climg/60151fab0980b67212320712.jpg

    2021-01-30 16:58:31
  • liuyubobobo 回复 提问者 wukai001 #2

    1)在你的环境执行课程代码,是否有问题?2)在 head = tail 后打印一下 head 的信息,结果是怎样的?

    2021-01-30 17:05:11
  • liuyubobobo 回复 提问者 wukai001 #3

    另,你这个截图不能说明运行了 head = tail,可能只运行了 else 部分。请确定 head= tail 这句话被运行了。

    2021-01-30 17:06:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2602    人
  • 解答问题       1096    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码