#java #duplicates #singly-linked-list
#java #дубликаты #single-linked-list
Вопрос:
Когда я пытаюсь реализовать метод для удаления дубликатов, он возвращает связанный список, в котором все еще присутствуют дубликаты. Я не уверен, является ли это проблемой присвоения переменной или, возможно, методом show (), который я создал.
https://www.dropbox.com/s/2cjj4nb4v8i5fg9/RemoveDuplicates.zip?dl=0
public class LinkedList {
LinkedListNode head;
//generating add method to
public void add(int data) {
LinkedListNode newNode = new LinkedListNode();
newNode.data = data;
newNode.next = null;
if (head == null) {
head = newNode;
}
else {
LinkedListNode current = head;
while(current.next != null) {
current = current.next;
}
current.next = newNode;
}
}
public void show() {
LinkedListNode newNode = head;
while(newNode.next != null) {
System.out.println(newNode.data);
newNode = newNode.next;
}
System.out.println(newNode.data);
}
}
public class Test {
public static void main(String[] args) {
LinkedListNode head = new LinkedListNode();
//12 and 5 are duplicates
LinkedList list = new LinkedList();
list.add(5);
list.add(45);
list.add(12);
list.add(12);
list.add(5);
list.add(33);
list.add(12);
list.add(45);
list.show();
removeDuplicates(head);
list.show();
}
public static void removeDuplicates(LinkedListNode head) {
LinkedListNode current = head;
LinkedListNode runner = null;
while (current != null) {
runner = current;
while (runner.next != null) {
if (runner.next.data == current.data) {
runner.next = runner.next.next;
}
else {
runner = runner.next;
}
}
current = current.next;
}
}
}
Комментарии:
1. вы вызываете метод removeDuplicates() на головном узле, а не в списке
2. Почему вы заново изобретаете колесо вместо того, чтобы использовать java.util.LinkedList?
3. Это домашнее задание, которое мы должны выполнить таким образом
Ответ №1:
head
В вашем основном методе не совпадает с head
внутри вашего связанного списка.
head
В вашем основном методе всегда пуст, и вы его вообще не изменяете list
.