В качестве части назначения мне необходимо написать метод, который будет печатать повторяющиеся значения в связанном списке, а также сколько раз они происходят. Ниже приведен метод printRepeats()
, который использует вспомогательный метод countRepeats(ListNode node)
.Java - подсчет случаев в связанном списке
Проблема в том, что выходные данные моего метода повторяют повторяющиеся значения снова и снова. Например, в списке со значениями 1 1 1 2 3 4 5 6 7 6
выход равен 1 (Occurences = 3) 1 (Occurences = 3) 1 (Occurences = 3) 6 (Occurences = 2) 6 (Occurences = 2)
. Любое значение, которое повторяется, должно печатать только один раз. Какие-либо предложения? Заранее спасибо!
public class LinkedList
{
private ListNode first;
public void printRepeats()
{
String ans = "";
ListNode temp = first;
while(temp != null)
{
if(countRepeats(temp) > 1 && ans.indexOf((int)temp.getValue()) == -1)
{
ans += temp.getValue();
System.out.print(temp.getValue() + " (Occurences = " + countRepeats(temp) + ") ");
}
temp = temp.getNext();
}
if(ans.length() == 0)
System.out.print("None of the elements repeat.");
}
private int countRepeats(ListNode node)
{
ListNode temp = first;
int count = 0;
while(temp != null)
{
if((int)temp.getValue() == (int)node.getValue())
count++;
temp = temp.getNext();
}
return count;
}
}
Используйте HashMap, где ключ - это число в списке, а значение - его количество. –
Какая у вас спецификация? Имеете ли вы какие-либо ограничения времени выполнения или можете использовать другую структуру данных для решения этой проблемы? – CRC
@CRC Не может быть использована структура данных, отличная от связанного списка; что касается пределов времени выполнения, код должен быть максимально эффективным, но это не является главной задачей. – Abhi