Почему мой метод removeDuplicates () не возвращает связанный список без дубликатов? - PullRequest
0 голосов
/ 28 марта 2019

Когда я пытаюсь реализовать метод для удаления дубликатов, он возвращает связанный список с сохраняющимися дубликатами. Я не уверен, является ли это проблемой присвоения переменной или, возможно, созданного мной метода 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 Ответ

2 голосов
/ 28 марта 2019

head в вашем основном методе не совпадает с head в вашем связанном списке.

head в вашем основном методе всегда пуст, и вы не изменяете list вообще.

...