Как подсчитать частоту в отсортированном связанном списке (числа) Java

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

 class Node {

    int value; 
    int freq;
    Node next;
} private Node root;

теперь я пробовал этот код, чтобы сохранить частоты числа, сравнивая значения отсортированного списка.

public void frequencies(){
    Node neew=root;
    Node current = neew.next;
    int x=0;
    while (neew!=null) {
        if(neew.value==current.value){ 
            neew.freq=x+1;       
        }
        else{
       neew=neew.next;
       current=current.next;
        }
    }

}

Код не работает (очевидно), когда я запускаю программу, метод зацикливается.

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


person elunap    schedule 10.04.2014    source источник
comment
Подождите, так value уникальны по узлу или у вас может быть два узла с одним и тем же value?   -  person Daniel Kaplan    schedule 11.04.2014
comment
У меня может быть 2 узла с одинаковым значением   -  person elunap    schedule 11.04.2014


Ответы (2)


Похоже, у вас может быть два узла с одинаковым значением. В этом случае я думаю, что Node — неподходящее место для хранения частоты. Зачем узлу знать содержимое своих братьев и сестер? Вместо этого вы должны задать список этот вопрос. Хорошая структура данных для хранения — это Map. Пусть ключ карты будет Node.value, а значение карты будет частотой.

Повторите все свои узлы, затем верните Map.value += 1 на карту. Затем вы можете определить частоту значения, сказав: Map.get(value);.

person Daniel Kaplan    schedule 11.04.2014

То, как вы это делаете, на самом деле не очень хороший способ, попробуйте что-то вроде этого

Отслеживание частоты при вставке элемента.

2 случая для рассмотрения:

Если это новый элемент, установите freq = 0

иначе, если это дублированный элемент, то, когда вы найдете первый экземпляр этого элемента с тем же значением в связанном списке, установите частоту нового элемента = старый элемент. частота + 1, а затем продолжайте обновлять все старые элементы пока вы не достигнете элемента, который имеет значение diff (это основано на отсортированном связанном списке, с которым вы сейчас работаете)

person JoeC    schedule 11.04.2014