我在写一个使用Linkedlist的队列结构。我正在编写将这些元素添加到队列的方法。由于该问题指定该方法应该具有void enqueueCharacter(char ch)的签名,因此我编写了带签名的另一种方法void enqCharacter(queueNode q,char ch),并在enqueueCharacter中调用了此方法。以这两种方式更新方法中的LinkedList值有什么区别?
起初它失败了,我不知道为什么。我做了一个小小的改变,只是为了尝试它的工作。但事实上,我认为他们既要么都工作,要么都失败,因为(我认为)他们有完全相同的概念。
这里是queueNode的定义:
class queueNode
{
char head;
queueNode tail;
queueNode(char c)
{
head = c;
tail = null;
}
}
和队列的声明:
queueNode queue = null;
这是我原来写更新队列:
public void enqCharacter(queueNode q, char ch)
{
if(q == null) q = new queueNode(ch);
else enqCharacter(q.tail, ch);
}
public void enqueueCharacter(char ch)
{
enqCharacter(queue, ch);
}
这个概念是在我调用enqueueCharacter(char ch)后立即调用enqCharacter(queue,ch)并且什么也不做SE。在enqCharacter(queueNode q,char ch)中,我检查q是否为null,如果是,则将第一个元素添加到q中,否则对q.tail执行相同的操作。但我检查,结果我从来没有真正改变队列的值,但它应该因为我通过队列的方法(我试过传递this.queue以及但仍然不工作)。
然后,我改变了它稍微:
public void enqCharacter(queueNode q, char ch)
{
if(q.tail == null) q.tail = new queueNode(ch);
else enqCharacter(q.tail, ch);
}
public void enqueueCharacter(char ch)
{
if(queue == null) queue = new queueNode(ch);
else enqCharacter(queue, ch);
}
我做了这些改变,只是因为我没有其他的想法,不是因为我觉得这是更好的,但它的工作。我仍然不知道为什么。
任何人都可以解释为什么我应该更新尾巴而不是队列本身?非常感谢你!
哦,我明白了。但是如果我想发送队列的引用,无论它是否为空,我该怎么办?使用和排队? – sy19890515
在你的情况下考虑一个链:ABC:假设A是B的朋友,B是C,C是没有朋友的朋友,现在你想把某人附加到C作为朋友,因此你发送这个nobody(空引用)作为参数方法和参数为nobody(null),方法赋予一个新的品牌人对这个没有人说D,但是没有办法可以把那个D附加到C上,因为方法没有C的引用把D附加到它上面。因此,D仍然在宇宙中的某个地方漂浮,而不依附于任何人。 你也不能在java中使用&队列。 – vvtx
噢谢谢你解释! – sy19890515