Every day a Leetcode
题目来源:3217. 从链表中移除在数组中存在的节点
解法1:集合 + 链表遍历
代码:
/*
* @lc app=leetcode.cn id=3217 lang=cpp
*
* [3217] 从链表中移除在数组中存在的节点
*/
// @lc code=start
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution
{
public:
ListNode *modifiedList(vector<int> &nums, ListNode *head)
{
unordered_set<int> dict(nums.begin(), nums.end());
ListNode *dummy = new ListNode();
dummy->next = head;
ListNode *p = dummy;
while (p->next)
{
if (dict.contains(p->next->val))
p->next = p->next->next;
else
p = p->next;
}
return dummy->next;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n+m),其中 n 是数组 nums 的长度,m 是链表的长度。
空间复杂度:O(n),其中 n 是数组 nums 的长度。