Двусвязный список Двойная сортировка и несортировка Проблема добавления метода - PullRequest
1 голос
/ 06 марта 2019

Итак, я искал больше недели и не смог найти решение своей проблемы. Мой профессор немного помог, но я просто не могу понять, как добавить узлы в отсортированном порядке.

Что я должен делать:

Напишите метод add, который добавляет узел в список в несортированном порядке (когда пользователь вводит их (гипотетически)) и в порядке возрастания от наименьшего к наибольшему.

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

Узлы связанного списка имеют следующий, предыдущий, следующийСортированный, предыдущийСортированный и данные.

public void add(T t) {
    Node node = new Node(t, null, null, null, null);
    tail.prev.next=node;
    node.next=tail;
    tail.prev=node;         

    if(size==0) {
        node.nextSort=tail;
        head.nextSort=node;
        node.prevSort=head;
        tail.prevSort=node;

    }else{
        Node curr = head.nextSort;
        while(curr!=null) {
        if(t.compareTo(curr.data)<0) {
            node.nextSort=curr;
            curr.prevSort.nextSort=node;
            node.prevSort=curr.prevSort;
            curr.prevSort=node;
        }

    }
    size++;
}

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

/**
* This is the doubly-linked list node.
*/
private class Node
{
        private T data;
        private Node prev;
        private Node next;
        private Node prevSort;
        private Node nextSort;

        /**
         * Constructs basic list node.
         *
         * @param d The data element held by the list node.
         * @param p A Node that occurs immediately before this in list order.
         * @param n A node that occurs immediately after this in list order.
         */
        private Node(T d, Node p, Node n, Node ps, Node ns)
        {
            data = d;
            prev = p;
            next = n;
            prevSort = ps;
            nextSort = ns;
        }
}

Это класс узла.

Я просто ищу подсказку о том, что я могу делать неправильно, например, если мои соединения испорчены или нет, когда дело доходит до сортировки или я делаю что-то странное. Даже ссылка с простыми объяснениями будет полезна, так как я не очень хорошо разбираюсь в словарном / жаргонизме.

...