Удалить дубликаты узлов из отсортированного связанного списка - PullRequest
1 голос
/ 14 апреля 2020

Следующий фрагмент кода предназначен для удаления дубликатов из отсортированного связанного списка. Пожалуйста, предложите мне изменения, которые необходимо внести, чтобы исправить код как неверный вывод для значений узлов 3 3 3 4 5 5. Ожидаемый результат - 3 4 5, и я получаю 3 4 5 5.

static SinglyLinkedListNode removeDuplicates(SinglyLinkedListNode head) {


SinglyLinkedListNode temp,temp1;
if((head==null)||(head.next==null))
    return head;

for(temp=head;temp.next!=null;temp=temp.next)
{

    for(temp1=temp.next;temp1.next!=null;temp1=temp1.next)
    {
        if(temp.data==temp1.data)
        {
            temp.next=temp.next.next;
        }
    }
}

return head;

}

1 Ответ

0 голосов
/ 15 апреля 2020

Требуется всего 3 изменения,

  1. Дополнительное условие, чтобы проверить, обнаружили ли мы дублирующиеся элементы и достигли ли мы конца связанного списка, или нет, основываясь на этом условии, мы можем решить, указывать ли темп следующему узлу или завершить наш там есть связанный список.
  2. Теперь нам нужно быть осторожным со вторым для условия l oop, так как теперь мы переходим к конечному узлу, мы должны установить условие как temp1! = null (вместо temp1.next! = Null ).
  3. В самом верхнем l oop также нам нужно установить условие как temp! = Null (вместо temp.next! = нуль ). Вот и все.

Полный обновленный код:

static SinglyLinkedListNode removeDuplicates(SinglyLinkedListNode head) {

    SinglyLinkedListNode temp,temp1;

    if((head==null)||(head.next==null))
        return head;

    for(temp=head;temp!=null;temp=temp.next)
    {

        for(temp1=temp.next;temp1!=null;temp1=temp1.next)
        {
            if(temp.data==temp1.data)
            {
                if(temp.next.next != null){
                    temp.next=temp.next.next;
                } else {
                    temp.next = null
                }
            }
        }
    }

    return head;

}

Надеюсь, это поможет!

...