对于一个赋值(很快就会到期),我必须将我手工实现的链表排入队列(不使用java的内置类)。链表如下:
public class SnocList {
private char c;
private SnocList l;
public SnocList(){
}
public SnocList (char x, SnocList y) {
this.c = x;
this.l = y;
}
public char getC(){
return this.c;
}
public SnocList getL(){
return this.l;
}
public void setNext(SnocList input){
this.l = input;
}
public boolean isEmpty() {
if (this.c == 0) return true;
return false;
}
}
我的队列类如下:
public class SnocQueue {
private SnocList list;
public SnocQueue(){
this.list = new SnocList();
}
public void enqueue(char c){
//I don't know what to put here
}
}
我不知道该怎么做。它显然很简单,但我不知道该怎么做。对于那些想要帮助的人,enqueue会将新节点添加到上一个列表的空引用(空指针)所在的列表中。
['a'| - ] - > ['b'| - ] - > ['c'| null]在这里添加新节点
答案 0 :(得分:0)
要排队,你需要一个'尾巴'领域和头部'字段也是如此,对于这个例子,我将创建一个类' Item'的对象队列,你可以使用你需要的节点
public class Item {
private int value;
private Item next;
public Item(int val) {
this.value = val;
}
public void setNext(Item item) {
this.next = item;
}
}
队列:
public class SomeQueue {
private Item head;
private Item tail;
private int size;//size is used to verify if it has Items and avoid null references
public SomeQueue(){
this.size = 0;
}
public void enqueue(Item item) {
if (this.size > 0) {
this.tail.setNext(item);
this.tail = item;
} else { //this is when the size is 0, it means is empty
this.head = item;
this.tail = item;
}
this.size++;
}
}
正如您所看到的,队列的重要部分是头部和尾部,方法setNext也很重要,可以在节点之间进行引用。
答案 1 :(得分:0)
l
SnocList的引用。
l
将是null
,因为没有其他
链接列表中的SnocLists。然后,return
结束该方法的执行。else
),请使用while循环遍历链接列表,直到找到SnocList,其对l
的引用为null
。通过将新的SnocList对象new SnocList(ch, curr.l)
分配给以前为空的curr.l
,将新的SnocList追加到链接列表的末尾。
public class SnocQueue {
SnocList head;
public void enqueue(char ch) {
if(head == null) {
head = new SnocList(ch, null);
return;
} else {
SnocList curr = head;
while (curr.l != null) {
curr = curr.l;
}
curr.l = new SnocList(ch, curr.l);
}
}
}