Удалить узел с самыми большими значениями из связанного списка - PullRequest
0 голосов
/ 11 октября 2018

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

Список выглядит следующим образом:

public List<T extends Comparable<T>>{

        private Node<T> head;

        public List(){
            this.head = null;
        }

        //inner class Node
        public class Node<T>{
            T obj;
            Node<T> next;
        }

        public Node(T obj){
            this.obj = obj;
        }
        //the method my question is about
        public T remove(){

            if(head == null) return null;

            else {

            Node<T> act = head;
            Node<T> prev = head //previous Node
            Node<T> biggest;

            while(act != null){
                if(act.obj.compareTo(prev.obj) > 0) {
                    biggest = act;
                }
                prev = p;
                p = p.next;
            }
            return biggest.obj;
        }
}

Этот код получает только самый большой объект, но не удаляет узел.Я не знаю, как адаптировать цикл while для удаления узла.Если я нашел самый большой элемент, указатель prev.next должен как-то перейти в узел act.next.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Подсказка: если односвязный список содержит более одного элемента, и вы хотите вырезать узел, который содержит наибольшее значение, вы должны использовать два цикла while, первый цикл для определения наибольшего значения,второй цикл, чтобы найти узел, который содержит это наибольшее значение, и вырезать его из списка.

0 голосов
/ 12 октября 2018

В настоящий момент ваш код сравнивает два соседних узла if(act.obj.compareTo(prev.obj), где я предполагаю, что узлы не упорядочены по значению (вы не упомянули об этом в своем вопросе), поэтому это неверно.

ЧтоВы хотите сделать это:

  1. Найти наибольшее значение в списке
  2. Удалить узел с этим значением

T biggestValue = head.obj;

// 1
while(act != null) {
    if(act.obj.compareTo(biggestValue.obj) > 0) {
        biggestValue = act.obj;
    }
}

// 2
while(act != null) { // that loop and its body could be simplified by using: while(!act.obj.equals(biggestValue)) but I leave it that way for brevity
    if(act.obj.equals(biggestValue)) {
        prev.next = act.next;
        break;
    }
    prev = act;
    act = act.next;
}
...