carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode82:删除排序链表中的重复元素 II(remove-duplicates-from-sorted-list-ii) #226

Open carloscn opened 1 year ago

carloscn commented 1 year ago

问题描述

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

示例 1:

image

输入:head = [1,2,3,3,4,4,5] 输出:[1,2,5]

示例 2:

image

输入:head = [1,1,1,2,3] 输出:[2,3]  

提示:

链表中节点数目在范围 [0, 300] 内 -100 <= Node.val <= 100 题目数据保证链表已经按升序 排列

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

carloscn commented 1 year ago

问题分析

int32_t delete_duplicates(LINKLIST_T* head)
{
    int32_t ret = 0;
    LINKLIST_T *list = head;
    LINKLIST_T *pre = list;

    UTILS_CHECK_PTR(list);

    while (list->next != NULL) {
        if (list->val != list->next->val) {
            pre = list;
            list = list->next;
        } else {
            pre->next = list->next;
            linklist_free_node(list);
            list = pre->next;
        }
    }

finish:
    return ret;
}
carloscn commented 1 year ago

code

https://review.gerrithub.io/c/carloscn/structstudy/+/554158 https://github.com/carloscn/structstudy/commit/f81b02f513ff0e92104afad902a51907f93a7165