首页 > 解决方案 > 从已排序的单链表中删除重复值

问题描述

我正在尝试从已排序的单链表中删除重复值。

这是我的代码

SinglyLinkedListNode* removeDuplicates(SinglyLinkedListNode* head) {

if(head==NULL)
     return head;

  int flag=0;
  SinglyLinkedListNode* p,*q,*temp;

  for(p=head;p->next!=NULL;p=p->next)
      {
          if(flag==1)
             {
                 p=temp;
                 flag=0;
             }

          q=p->next;

          if(q->data==p->data)
             {
                 temp=p;
                 p->next=q->next;
                 free(q);
                 flag=1;
             }
      }

      return head;

}

但是,当单链表为 3->3->3->4->5->5->NULL 时,代码会失败

标签: data-structureslinked-listsingly-linked-list

解决方案


请尝试此代码-

void removeDuplicates(SinglyLinkedListNode* head)  
{  
    SinglyLinkedListNode* current = head;  
  
    SinglyLinkedListNode* nextNode;  
      
    if (current == NULL)
    return;  
  
    while (current->next != NULL)  
    {  
    if (current->data == current->next->data)  
    {       
        nextNode = current->next->next;  
        free(current->next);  
        current->next = nextNode;
    }  
    else
    {  
        current = current->next;  
    }  
    }  
}

推荐阅读