LC 83. 删除排序链表中的重复元素

发布时间:2024年01月14日

83. 删除排序链表中的重复元素

难度 : 简单

题目:

给定一个已排序的链表的头 head删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表

提示:

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

示例 2:

img

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

分析

因为已经保证是升序排列,所以我们可以分别用两个指针配合来做,或者直接递归也行

快慢指针

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        ListNode* slow = head;
        ListNode* fast = head;
        while (fast) {
            while (fast && slow->val == fast->val) fast = fast->next;
            slow->next = fast;
            slow = fast;
        }
        return head;
    }
};

时间复杂度: O ( n ) O(n) O(n)

递归

class Solution {
public:
    unordered_map<int, bool> vis;
    ListNode* dfs(ListNode* u) {
        if (!u) return nullptr;
        if (vis[u->val]) return dfs(u->next);
        vis[u->val] = true;
        u->next = dfs(u->next);
        return u;
    }
    ListNode* deleteDuplicates(ListNode* head) {
        if (!head) return head;
        return dfs(head);
    }
};

结束了

文章来源:https://blog.csdn.net/qq_74040620/article/details/135588190
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。