0
点赞
收藏
分享

微信扫一扫

算法:删除链表中的重复元素Ⅱ

大雁f 2022-03-11 阅读 172

leetcode 删除链表中的重复元素Ⅱ

在这里插入图片描述

一个已排序的链表,简化了操作,从头指针开始遍历,只需要判断后面的节点的值是否相等即可。

需要维护三个节点,出现相等时的前一个节点,以及结束相等的情况。

不要纠结于用节点的值去做比较,而是要保存这个值进行比较,就可以少维护一个节点


代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* deleteDuplicates(struct ListNode* head){
    if (!head) {
        return head;
    }

    struct ListNode* tmp = malloc(sizeof(struct ListNode));
    tmp->next = head;

    struct ListNode* cur = dummy;
    while (cur->next && cur->next->next) {
        if (cur->next->val == cur->next->next->val) {
            int x = cur->next->val;
            while (cur->next && cur->next->val == x) {
                cur->next = cur->next->next;
            }
        } else {
            cur = cur->next;
        }
    }

    return tmp->next;
}

首先,创建一个空的头节点,如果下下个节点的值与下个节点的值相等,则保存下个节点的值,并进入循环,删除下个节点,直到下个节点的值与保存的值不相等为止。

如果下个节点的值与下下个节点的值不相等,则将当前节点移动到下一个节点。

结果
在这里插入图片描述

举报

相关推荐

0 条评论