Почему я нахожу дополнительные ссылочные объекты в связанном списке?

1

Я работал над упражнением, чтобы лучше понять Linked List.

Мой выход:
*** DISPALY NAMES Miki null Arek null Magi null


Проблема: отображение нулей между именами.

Пытался сделать: написал множество операторов печати, и похоже, что добавляет в список дополнительный объект ссылки на имя. Я пытался найти ошибку в методе добавления, но логически все штрафы для меня.

Мне не разрешено использовать 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; Прошу прощения за путаницу. Я сделал исправление в коде выше.

Теги:
generics
data-structures
singly-linked-list

1 ответ

2
Лучший ответ

Ваша проблема в этой строке.

this.next = new Name();

Вы хотите добавить новый "пустой объект" на обратной стороне каждого Name, которую вы добавляете. Удалите его, и вы получите желаемый результат. (Я предполагаю, что вы также имеете Name extends Employee там где-то, иначе это не скомпилируется).

  • 0
    Спасибо за совет. Переменная экземпляра next в имени класса должна выглядеть следующим образом: private Name next; Я прошу прощения за путаницу. Я сделал исправление в коде выше. Может быть, это забавный вопрос, но как мне создать экземпляр «next» в перегруженном конструкторе? У меня есть только одна идея, но я не уверен, что она верна. Next = null;
  • 1
    Вы можете написать next = null; но тебе не нужно. Переменные экземпляра типа объекта всегда по умолчанию равны нулю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню