温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

[LeetCode]82. Remove Duplicates from Sorted List II

发布时间:2020-07-28 15:37:38 来源:网络 阅读:303 作者:風子余 栏目:编程语言

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.


删除排序链表中的重复数据。与83题对比可知,83题要求重复数据保留一个,而此题要求出现重复数据时,删除重复数据的节点,一个不留。故此题与83题类似。


1)如果空链表或一个节点,返回即可。

2)循环条件是链表不为空,此时最后一个节点需处理,当出现最后两个节点值一致时。此时需要逐个删除。

3)当出现当前节点和下一节点值相同时:指向下个节点并删除当前节点。

4)flag作用:当两个节点相同时,我删除当前节点后,flag置为一,标示下个节点是重复值节点,需删除。删除完并将标示置零。

5)否则保留节点。指向下个节点即可。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* deleteDuplicates(struct ListNode* head) 
{
    if ( head == NULL || head->next == NULL )
    {
        return head;
    }
    
    struct ListNode **list = &head;    
    int flag = 0;
    while ( *list )
    {
        if ( (*list)->next != NULL  && (*list)->val == (*list)->next->val )
        {
            flag = 1;
            struct ListNode *delete = *list;
            (*list) = (*list)->next;
            free(delete);
        }
        else if ( flag == 1 )
        {
            flag = 0;
            struct ListNode *delete = *list;
            (*list) = (*list)->next;
            
            free(delete);
        }
        else
        {
            list = &(*list)->next;
        }
    }
    
    return head;
}


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI