Как посчитать частоту в отсортированном связанном списке (числа) 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;
}
}
}
Код не работает (очевидно), когда я запускаю программу, метод зацикливается.
Я новичок в этом деле, так что я не знаю точно, что я делаю неправильно, вы, ребята, можете мне помочь?
2 ответа
Похоже, вы можете иметь два узла с одинаковым значением. В этом случае, я думаю, что Node - это неправильное место для хранения частоты. Зачем Узлу знать содержимое своих братьев и сестер? Вместо этого вам следует задать этот вопрос списку. Хорошая структура данных для хранения это Map
, Пусть ключ карты будет Node.value
и значение карты будет частотой.
Переберите все ваши узлы, затем поставьте Map.value += 1
обратно на карту. Затем вы можете определить частоту значения, сказав: Map.get(value);
,
То, как вы это делаете, не совсем хороший способ, попробуйте что-то вроде этого
Отслеживание частоты, когда вы вставляете элемент.
2 случая, чтобы рассмотреть о:
Если это новый элемент, установите freq = 0
иначе, если это дублированный элемент, тогда, когда вы найдете первый экземпляр этого элемента, который имеет такое же значение в связанном списке, установите freq для нового элемента = old element.frequency + 1, а затем продолжайте обновлять весь старый элемент пока вы не достигнете элемента, имеющего значение diff (это основано на отсортированном связанном списке, с которым вы сейчас работаете)