Как я могу удалить объект из конца линии объектов, связанных друг с другом? (Джава) - PullRequest
1 голос
/ 23 февраля 2012

Другими словами, у меня есть линия объектов Dancer.

public class Dancer {

    private String name;
    private Dancer next;

    public Dancer(String nameInput, Dancer followingDancer){
        name = nameInput;
        next = followingDancer;
    }

У меня есть сеттеры и геттеры для них.

Чтобы связать их вместе, у меня есть CongaLine.

public class CongaLine {

    private Dancer head; // first dancer in the conga line.

    public CongaLine() {
        head = null;
    }

Итак, используя цикл while, чтобы найти ближайшего к последнему Dancer, как мне найти извлечение последнего Dancer из CongaLine?

Мой текущий метод, который имеет недостатки, выглядит так:

public String removeFromEnd() {
    String removed = null;
    // For multiple dancers, find the penultimate and remove its "next"
    while (head.getNext() != null) {
        if (head.getNext().getNext() == null){
        removed = head.getNext().getName();
        head.setNext(null);
        }
    }
    // In the case of only one dancer, remove that dancer.
    if (head != null && head.getNext() == null) {
        removed = head.getName();
        head = null;
    }
    return removed;
}

Ответы [ 2 ]

3 голосов
/ 23 февраля 2012

Хм, я мог бы дать вам точный код (это всего лишь несколько строк), однако, я думаю, поскольку вы делаете это для обучения, лучше вместо этого дать пару подсказок:

  • Подумайте окакое свойство последний танцор может использовать для его идентификации.
  • Подумайте, как вы смотрите на всех танцоров, чтобы найти того, у кого есть подходящее свойство.
  • Подумайте о том, какие другие изменения должны произойти (например, с танцором с предпоследним) и как вы гарантируете, что эти изменения всегда будут иметь место.
2 голосов
/ 23 февраля 2012

Это связанный список . Вам придется проходить через танцоров, пока не дойдете до конца линии конга:

Dancer d = congaLine.getHead();
while(d.getNext() != null) {
  d = d.getNext();
}

В конце этого d будет последним танцором в congaLine. Вам просто нужно реализовать геттер для next танцора в Dancer и для head танцора в CongaLine.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...