我一直在做练习以更好地理解链表。
我的输出是:
***显示名称
三木
无效的
阿雷克
无效的
贤士
空
问题:显示名称之间的空值。
尝试做:编写了一堆打印语句,看起来正在向列表中添加额外的名称引用对象。我试图找到添加方法中的错误,但从逻辑上讲,一切对我来说都很好。
我不被允许使用 LinkedList API。
感谢您的帮助。
<pre> <code>
public class NameTest {
public static void main(String[] args) {
NameList<Name> n = new NameList<Name>();
Name n1 = new Name(1,"Miki");
Name n2 = new Name(2, "Arek");
Name n3 = new Name(3, "Magi");
n.addName(n1);
n.addName(n2);
n.addName(n3);
n.displayNames();
System.out.println("*******************\n");
}
}
public class Name {
private int nameId;
private String firstName;
private Name next;
public Name() { }
public Name(int nameId, String firstName) {
super();
this.nameId = nameId;
this.firstName = firstName;
this.next = new Name();
}
public int getNameId() {
return nameId;
}
public void setNameId(int nameId) {
this.nameId = nameId;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public Name getNext() {
return next;
}
public void setNext(Name next) {
this.next = next;
}
}
public class NameList<T extends Name> {
private T head;
private int value;
public NameList() {
head = null;
value = 0;
}
public T getHead() {
return head;
}
public void setHead(T head) {
this.head = head;
}
public void addName(T name) {
if(head == null) {
setHead(name);
value++;
}
else {
T curr = getHead();
while(curr.getNext() != null) {
curr = (T) curr.getNext();
}
curr.setNext(name);
value++;
}
}
public void displayNames() {
System.out.println("***DISPLAY NAMES ");
T curr = getHead();
while(curr.getNext() != null ) {
System.out.println(curr.getFirstName());
curr = (T) curr.getNext();
}
if(curr.getNext() == null) {
System.out.println(curr.getFirstName());
}
}
类名中的实例变量next应该是这样的:private Name next;很抱歉造成困惑。我在上面的代码中进行了更正。
最佳答案
你的问题是这一行。
this.next = new Name();
您将在您添加的每个 Name
的后面添加一个新的“空对象”。删除它,你就会得到想要的结果。 (我假设您在某处也有 Name extends Employee
,否则无法编译)。
关于java - 为什么我会在链表中找到额外的引用对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22494295/