Почему мой метод removeDuplicates() не возвращает связанный список без дубликатов?

#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 .