Разделение объекта LinkedList - PullRequest
0 голосов
/ 14 ноября 2018

Мне нужно построить и вернуть новый Q, который содержит вторую «половину» этого Q.

Примеры того, чего я пытаюсь достичь

  • это Q до разделения: 1, 3, 4, 8, 14
  • это Q после разделения: 1, 3
  • новый Q: 4, 8, 14

  • это Q перед разделением: 1, 3, 4, 8
  • это Q после разделения: 1, 3
  • новый Q: 4, 8

класс Q реализует ADT очереди, используя класс LinkedList из библиотеки классов Java. Класс Q ниже

import java.util.LinkedList;
public class Q {

// all Q objects have the same default capacity...
private final static int DFLT_CAPACITY = 4;

// every Q object has the following instance variables...
private LinkedList<Object> ll;
private int capacity;

/**
* Constructs an empty Q having DFLT_CAPACITY.
*/
public Q() {
  this(DFLT_CAPACITY);
}

/**
* Constructs an empty Q having client supplied capacity.
*
* @param capacity switched to DFLT_CAPACITY if less than one
*/
public Q(int c) {
  capacity = c < 1 ? DFLT_CAPACITY : c;
  ll = new LinkedList<Object>();
}

Моя проблема в том, что мне нужно вернуть объект Q, но у меня есть LinkedList. Я знаю, что эта попытка совершенно ошибочна, но я застрял на некоторое время.

public Q split() {
   int split = ll.size() / 2;
   for (int i = 0; i < split; i++) {
       ll.remove(i);
   }
   Q newQ = (Q) ll.clone();
   return newQ;

}

1 Ответ

0 голосов
/ 14 ноября 2018

Используйте subList() метод LinkedList.
Примечание: Прочитайте приведенный выше javadoc, чтобы вы знали, как это работает!

Вам также понадобится новый (приватный) конструктор для создания нового объекта Q.

В следующем предполагается, что capacity остается неизменным для существующего объекта Q, и что новый QОбъект «наследует» одинаковую емкость.

private Q(int c, LinkedList<Object> ll) {
    this.capacity = c;
    this.ll = ll;
}

public Q split() {
    List<Object> secondHalf = this.ll.subList(this.ll.size() / 2, this.ll.size());
    Q newQ = new Q(this.capacity, new LinkedList<>(secondHalf));
    secondHalf.clear();
    return newQ;
}
...