Я пытаюсь удалить дубликаты из связанного списка. Однако метод, который я написал, вызывает бесконечный цикл, и я не уверен, почему он есть. Вот мой метод:Удаление дубликатов из связанного списка
import java.util.HashSet;
import java.util.Hashtable;
public class Question {
public static void deleteDupsB(LinkedListNode n) {
LinkedListNode runner = null;
LinkedListNode previous = null;
while(n != null) {
runner = n.next;
while(runner != null) {
if(n.data == runner.data) {
previous.next = runner.next; //This line is causing an infinite loop and I'm not sure why.
}
else {
previous = runner;
}
runner = runner.next;
}
n = n.next;
}
}
public static void main(String[] args) {
LinkedListNode first = new LinkedListNode(0, null, null); //AssortedMethods.randomLinkedList(1000, 0, 2);
LinkedListNode head = first;
LinkedListNode second = first;
for (int i = 1; i < 8; i++) {
second = new LinkedListNode(i % 2, null, null);
first.setNext(second);
second.setPrevious(first);
first = second;
}
System.out.println(head.printForward());
// LinkedListNode clone = head.clone();
deleteDupsB(head);
System.out.println(head.printForward());
// deleteDupsC(clone);
// System.out.println(clone.printForward());
}
}
Я знаю, что есть некоторые проблемы с ним, такими как runner
метанием исключения в конце концов. Но я думаю, я не слишком беспокоюсь об этом прямо сейчас. Я думаю, что этот метод производит эффект, потому что, когда я вставляю break
внутри первого цикла while
и second
, он удаляет все 0s. Во всяком случае, есть ли у вас какие-либо предложения?
Возможный дубликат [Удалить дубликаты из несортированному связанного списка] (http://stackoverflow.com/questions/17643790/remove-duplicates-from-an-unsorted-linked-list) –
Я думаю, что 'предыдущая .next = runner.next; 'запускается в адрес 0, потому что' previous' имеет значение null при первом запуске. Интересно, почему не возникла ошибка доступа к памяти. –