简单链接列表
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;
}
}
}
#The class class#
我添加了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个元素?
为什么它会忽略第二个添加元素?
答案 0 :(得分:1)
要=此;这句话对变量'last'没有影响,因为veriable'to'是形式参数,而变量'last'是实际参数。所以,当你执行这句话“to = this;”的价值 变量'last'没有改变为next。这意味着变量'last'始终指向第一个元素。
我的变化是:新条目(el,last); - > last = new Entry(el,last); 事情看起来更好。
答案 1 :(得分:0)
考虑一下get
方法正在做什么。你已经注意到它有一些异常的行为。
public String get() {
Entry temp=first;
first=first.next;
return temp.data;
}
第一次打电话给我的是什么?
temp
获取first
指向的任何内容first
已移至下一个元素( RED FLAG )temp
的数据会被返回...... 一个问题是你正在移动你的头部参考 - 这是一个坏主意,因为这意味着你再也无法访问列表中真正的第一个元素。 / p>
现在,即使有了这个实现,你仍然可以获得第一个元素。
上面只是一个红色的鲱鱼 - 虽然你应该不移动你的头指针。这是真正的问题。后续add
来电列表会发生什么?
public void add(String el) {
if (isEmpty()) {
first = new Entry(el);
last = first;
return;
}
new Entry(el,last);
}
仅插入第一个元素并插入最后一个元素。 <{1}}之后的所有其他条目都将被覆盖。
我建议您使用调试器来解决这个问题,因为它源于对这样做的好方法的误解。一旦你有一个元素,你只想通过你的尾指针插入东西。通过对象创建来实现这一点只会引起心痛和混乱。
对于子孙后代,我将给你留下一个示例,逐字实现我为一段时间做的单链表实现而写的。它描述了一种更可行的插入列表的方法。
next