Добавление всех элементов в одном связанном списке в конец другого списка - PullRequest
0 голосов
/ 17 февраля 2019

У меня проблемы с написанием метода, который добавляет все элементы списка параметров метода в конец другого списка.Предполагается, что метод возвращает true, если список был изменен, и false в противном случае.

Например, если исходный список был 1-> 6-> 5, а другой список 3-> 8-> 2.После вызова список теперь 1-> 6-> 5-> 3-> 8-> 2.

У меня проблемы с булевыми операторами возврата, так как я запутался, как они связаны с логикой списка.Я также не знаю, как далеко должны двигаться указатели, чтобы добавлять списки.Все это можно сделать за один цикл, но я не знаю как.

public boolean appendList(DynamicList othrList) {
  for (DynamicNode tmp = head; tmp != null; tmp.getNext()) {
    if(tmp == null) {
      DynamicNode ex = otherList.getList;
      tmp.setNext(ex);
    }
    return true;
  }
  return false;
}

Полный код:

public class DynamicNode {
  private Object info;        // the data in the node
  private DynamicNode next;   // refers to the next node on the list

  public DynamicNode(Object x, DynamicNode n) {
    info = x;
    next = n;
  }

  public Object getInfo() { return info; }
  public DynamicNode getNext() { return next; }
  public void setInfo(Object x) { info = x; }
  public void setNext(DynamicNode n) { next = n; }
  public String toString() { return info.toString(); }
}

class DynamicList {
  private DynamicNode head;

  public DynamicList() { head = null; }
  public DynamicList(DynamicNode head) {  this.head = head; }

  public boolean isEmpty() { return head == null; }
  public DynamicNode getList() { return head; }

  // The problem
  public boolean appendList(DynamicList othrList) {
    for (DynamicNode tmp = head; tmp != null; tmp.getNext()) {
      if(tmp == null) {
        DynamicNode ex = otherList.getList;
        tmp.setNext(ex);
      }
      return true;
    }
    return false;
  }
}

1 Ответ

0 голосов
/ 17 февраля 2019

Для рассматриваемого кода (с комментариями в коде, содержащем дополнительное объяснение).

Это соответствует требованию: «если исходный список был 1-> 6-> 5, идругой список 3-> 8-> 2. После вызова список теперь 1-> 6-> 5-> 3-> 8-> 2. "

Добавляет элементы(узлы), поэтому после добавления оба списка имеют одни и те же узлы.Что должно быть хорошо.Однако это подразумевает, что если узел в «othrlist» изменяется после добавления, он также изменится в списке.Часто это ожидаемое поведение.Таким образом, он «неглубокий» и не создает каких-либо необоснованных (глубоких) копий элементов.

Подводя итог, можно сказать, что поведение, выбранное в его методе, равно :Один (!) Цикл, только добавление и не дублирование.

public boolean appendList(DynamicList othrList) {
    DynamicNode tmp = head;
    if(tmp == null) { //special case empty list
        head = othrList.getList();
        return null != head; //early exit, list changed if head is no longer null.
    }
    while (tmp.getNext() != null) tmp = tmp.getNext(); //search for the last element
    tmp.setNext(othrList.getList()); //link last element to head of other.
    return null != tmp.getNext(); //list changed if tmp.next is no longer null(as it was before).
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...