public class LinkedQueue {
private class Node {
String value;
Node next;
Node(String val,Node n) {
value=val;
next=n;
}
}
private Node front=null;
private Node rear=null;

public void enqueue(String s) {
if(rear!=null) {
rear.next=new Node(s,null);
rear=rear.next;
}else {
rear=new Node(s,null);
front = rear;
}
}
}enqueue中的if和else没看懂。
else里,rear是空的情况,为什么front等于rear?

解决方案 »

  1.   

    front = rear; 是front指向rear
      

  2.   

    最通常的情况下,不就是rear是空的吗?加一个元素进来后,front移动之后也不指向rear啊。
      

  3.   

    front移动
    不理解
      

  4.   

    你可以理解为排队买车票。出队操作,front会移动,入队操作,rear会移动。程序中的if和else是为了处理队列开始加入第一个元素的情况。
    front -> NULL, rear -> NULL
    这是开始,加入第一个元素后
    +---+
    | s | <- rear就成这样了,但是front也要指向这里
    +---+
    +---+
    | ^ | <- rear <- front这是正确的结果
    +---+希望我解释清楚了哈
      

  5.   

    可是front指向的不是元素吗?但是rear指向的是元素的下一位啊。
      

  6.   

    程序中else判断目的是在队列为空的情况下,让队列的头和尾都指向同一个节点
      

  7.   

    rear只在Queue还为空的时候才会等于nullif(rear != null) 其实就是已经存在一个元素了if里面的内容就是生成一个新的Node对象,使得原来的rear.next指向这个新的Node,并且使得rear指向这个新Nodeelse的情况是Queue为空情况,初始化front和rear都指向这个新的Node对象
      

  8.   


    front指向是第一个元素,rear指向最后一个元素
      

  9.   


    8楼正解!else是创建队列第一个节点,并用front记下来。
      

  10.   

    front和rear是指针  front指向queue的头 rear指向尾 如果rear=null 则表明这个空队列所以头和尾指向同一个null队列 即front=rear