Как перебрать двойной связанный список и создать новый список с определенным значением? - PullRequest
0 голосов
/ 04 апреля 2019

Как выполнить итерацию по двойному связанному списку и создать новый двойной связанный список ниже или равный или выше или равный определенному значению?

Например:

["A", "B", "C"].below("B") = ["A", "B"]

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

main class:
.
.//some code
    LinkedList<Item> itemList = new LinkedList<>();
    itemList.add(....(..)));
    .//some code
    print(itemList.below(new Drink("Cola", 1.0, 1.0)));
    .
    .//some code

    public class LinkedList <T extends Comparable<? super T>> implements List<T>
    {
    ..

     private Node <T> head;
     private Node <T> last;
    ..//some code
    public void add(T value)
        { ..}

    public LinkedList <T> below (T value)
        {
            LinkedList <T> b = new LinkedList<>();
            Node <T> curr = new Node<>(value);
            Node <T> start = this.head;

            while(start.next != null && curr.data.compareTo(start.next.data) <= 0 )
            {
                b.add((T) start); //ClassCastException
                start = start.next;
            }
            return b;
        }


 private static class Node <T>
   {

    private T data;
    private Node <T> next;
    private Node <T> prev;
    private static int counter = 0;
    private final int ID;

    private Node(T data)
    {
        this.data = data;
        this.ID = counter;
        counter++;

    }

   }
 }

1 Ответ

1 голос
/ 04 апреля 2019

ClassCastException потому, что start определено как Node<T>, а следующий код преобразует объект Node<T> в объект T, что является ошибкой во время выполнения.

b.add((T) start); //ClassCastException

Вы, вероятно, хотите позвонить:

b.add(start.data)

Однако, data помечен private.Поэтому либо отметьте его public, либо лучше добавьте метод доступа getData() в Node.

...