我在CS课程中有一个关于循环双向链表的作业。我们给出了一个Node类来设置链接等。
public class Node {
private Node previous, next;
private Object data;
public Node(Object data) {
this.data = data;
}
public Node() {
}
public Node(Object data, Node previous, Node next) {
this.previous = previous;
this.next = next;
this.data = data;
}
public Node getPrevious() {
return previous;
}
public void setPrevious(Node previous) {
this.previous = previous;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
我们的任务是实施一些方法。在列表类中,创建了一个名为“base”的节点
public class DList {
private Node base;
public DList() {
}
所有方法都需要某种形式的遍历列表。根据我的理解,设置一个临时节点等于base.getNext()将给我列表的第一个节点并测试temp!= base是否是我的检查,因为基节点服务到达列表的末尾作为其余节点的锚(如果我的理解是正确的)。
然而,当我尝试做一些代码时,例如:
public int size() {
int count = 0;
if (base.getNext() == base)
return count;
else {
Node temp = base.getNext();
while (temp != base) {
temp = temp.getNext();
count++;
}
}
return count;
}
我在我说Node temp = base.getNext()的行中得到一个空指针异常;而对于我的生活,我无法理解为什么,因为正如我之前所说,我认为base.getNext()将是我列表中的第一个元素。
答案 0 :(得分:0)
不需要虚拟基节点。在这种情况下,base最初为null。 在那种情况下:
public int size() {
int count = 0;
if (base != null) {
Node temp = base;
do {
temp = temp.getNext();
count++;
} while (temp != base);
}
return count;
}