题解 | #删除有序链表中重复的元素-II#

删除有序链表中重复的元素-II

https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024

struct ListNode* deleteDuplicates(struct ListNode* head ) {
    // write code here
    struct ListNode *pre,*nxt,*prePre;
    if(head==NULL||head->next==NULL)
        return head;
    
    pre=head;
    prePre=head;
    nxt=pre->next;
    
    int flag=0;//判断结点是否为重复结点的标志
    while(pre!=NULL)
    {
        if(nxt!=NULL&&pre->val==nxt->val)
        {
            pre->next=nxt->next;
            free(nxt);
            nxt=pre->next;
            flag=1;
        }
        
        else
        {
          if(flag)//结点为重复结点的情况
          {
                if(pre==head)//待删除的结点为头结点的情况
                {
                    head=pre->next;
                    free(pre);
                    pre=head;
                    if(nxt==NULL)
                         break;
                    nxt=pre->next;
                }
                 else
                {
                     free(pre);
                     prePre->next=nxt;
                     pre=prePre->next;
                     if(nxt==NULL)
                         break;
                     nxt=nxt->next;
                 }     
          }
            
          else
          {
              prePre=pre;
              pre=pre->next;
              if(nxt==NULL)
                         break;
              nxt=nxt->next; 
          }
          flag=0;
        }
    }
    return head;
}

全部评论

相关推荐

26应届求职ing:你这是报了豆音四哥的班?双非本硕拿这两个项目写简历里投100多家嵌软也没什么面试,感觉项目简单了,很多人用
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务