Проблема с двусвязным списком, Дважды отсортированным и несортированным методом добавления

#java #linked-list #doubly-linked-list

#java #связанный список #дважды связанный список

Вопрос:

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

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

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

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

Узлы связанного списка содержат next, previous, nextSorted, previousSorted и data.

 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;
        }
}
  

Это класс node.

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

Комментарии:

1. Слишком много ссылок! Сначала выполните поиск (просто выполните поиск) по отсортированному списку, пока не найдете место, куда вы хотите вставить свой новый узел, затем привяжите его. Также убедитесь, что вы правильно обрабатываете случаи, когда новый узел должен вводиться до текущего заголовка или после текущего конца.

2. Я не понимаю вашего вопроса, вы имеете в виду, что вам нужно создать 2 add метода? Тот, который добавляет узел в отсортированном порядке, и тот, который добавляет узел в несортированном порядке?