![](/img/trans.png)
[英]Exception in thread “main” java.lang.NullPointerException
[英]Get Exception in thread “main” java.lang.NullPointerException with LinkedList
简单链表
public class List_manager {
Entry first;
Entry last;
public void add(String el) {
if (isEmpty()) { first=new Entry(el); last=first; return; }
new Entry(el,last);
}
public String get() {
Entry temp=first;
first=first.next;
return temp.data;
}
public boolean isEmpty() {
return first==null;
}
private class Entry {
String data;
Entry next;
public Entry(String data,Entry to) {
this.data=data;
to.next=this;
to=this;
}
public Entry(String data) {
this.data=data;
}
}
}
#主要班级#
我添加了3个元素,列表仅包含2个...为什么?
public class Main {
public static void main(String[] args) {
List_manager l=new List_manager();
l.add("1");
l.add("2");
l.add("3");
System.out.println(l.get());
System.out.println(l.get()); // Why here output: "3"??
System.out.println(l.get()); // here is an error occurs
}
}
我真的不明白为什么列表包含2个元素?
为什么忽略第二个添加的元素?
到这个=; 这句话对变量“ last”没有影响,因为可验证的“ to”是形式参数,而变量“ last”是实际参数。 因此,当您执行此句子“ to = this;”时 的价值
变量'last'未更改为next。这意味着变量'last'始终指向第一个元素。
我的更改是:new Entry(el,last); ->最后=新条目(el,last); 情况看起来更好。
考虑一下您的get
方法在做什么。 您已经注意到它的某些异常行为。
public String get() {
Entry temp=first;
first=first.next;
return temp.data;
}
我第一次叫这个会怎样?
temp
得到了first
指向的东西 first
移动到其下一个元素( RED FLAG ) temp
的数据已返回... 一个问题是您正在移动主要参考文献-这是一个坏主意 ,因为这意味着您永远无法再访问列表中真正的第一个元素。
现在,即使有了这种实现,您仍然应该能够获得第一个元素。
上面只是一个红色的鲱鱼-尽管您不应该移动头指针。 这是真正的问题。 后续add
呼叫到您的列表会怎样?
public void add(String el) {
if (isEmpty()) {
first = new Entry(el);
last = first;
return;
}
new Entry(el,last);
}
仅考虑插入的第一个元素和插入的最后一个元素。 next
所有其他条目将被覆盖。
我建议您使用调试器来解决这一问题,因为它是对执行此操作的好方法的误解。 一旦拥有一个元素,您只想通过尾指针插入内容。 通过创建对象来执行此操作只会导致心痛和混乱。
为了后代,我将为您提供一个示例,逐字记录的实现,这是我为前一段时间做的单链表实现编写的。 它描述了一种更可行的插入列表的方法。
public void insert(E data) {
Node<E> candidate = new Node<>(data);
if(head == null) {
head = candidate;
tail = head;
} else {
tail.setNext(candidate);
tail = tail.getNext();
}
size = size + 1;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.