我一直在努力练习以更好地理解Linked List。
我的输出是:
*** DISPALY NAMES
三木
空值
Arek
空值
贤士
空
问题:名称之间显示空值。
试图这样做:写了一堆打印语句,它看起来像是在列表中添加额外的Name引用对象。我试图在add方法中找到错误,但逻辑上一切都对我很有用。
我不允许使用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());
}
}
类名中的实例变量应该是这样的:private name next;我很抱歉混淆。我在上面的代码中进行了修正。
答案 0 :(得分:2)
你的问题就在这一行。
this.next = new Name();
您在添加的每个Name
的背面添加了一个新的“空对象”。删除它,你会得到所需的结果。 (我假设你在那里也有Name extends Employee
,否则这不会编译。)