当前位置: 首页 > news >正文

LeetCode 3217.从链表中移除在数组中存在的节点:哈希表(一次遍历)

【LetMeFly】3217.从链表中移除在数组中存在的节点:哈希表(一次遍历)

力扣题目链接:https://leetcode.cn/problems/delete-nodes-from-linked-list-present-in-array/

给你一个整数数组 nums 和一个链表的头节点 head。从链表中移除所有存在于 nums 中的节点后,返回修改后的链表的头节点。

 

示例 1:

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

输出: [4,5]

解释:

移除数值为 1, 2 和 3 的节点。

示例 2:

输入: nums = [1], head = [1,2,1,2,1,2]

输出: [2,2,2]

解释:

移除数值为 1 的节点。

示例 3:

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

输出: [1,2,3,4]

解释:

链表中不存在值为 5 的节点。

 

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 105
  • nums 中的所有元素都是唯一的。
  • 链表中的节点数在 [1, 105] 的范围内。
  • 1 <= Node.val <= 105
  • 输入保证链表中至少有一个值没有在 nums 中出现过。

解题方法:哈希表

使用哈希表记录numsnumsnums中都出现了哪些元素。

为了方便可以在链表第一个节点前设置一个一定不会被删除的没有实际值的“表头”,并使用两个变量lastlastlastnownownow记录上一个遍历到的节点和当前节点。

nownownow不为空时,若nownownownumsnumsnums中出现过,则扔掉nownownow(更新lastlastlastnextnextnextnownownownextnextnextnownownow后移);否则不删nownownowlastlastlastnownownow都指向下一个节点)。

  • 时间复杂度O(len(nums)+len(list))O(len(nums) + len(list))O(len(nums)+len(list))
  • 空间复杂度O(len(nums))O(len(nums))O(len(nums))

AC代码

C++
/** @LastEditTime: 2025-11-01 21:54:45*//*** 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* now) {unordered_set<int> se(nums.begin(), nums.end());ListNode* head = new ListNode(0, now);  // 不可以:ListNode* head(0, now);ListNode* last = head;while (now) {if (se.count(now->val)) {now = now->next;last->next = now;} else {last = now;now = now->next;}}return head->next;}
};

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

http://www.dtcms.com/a/557257.html

相关文章:

  • LeetCode - 寻找两个正序数组的中位数
  • 上海网站设计公司 静安沙井建网站
  • VMware17完成克隆ubuntu20.04时IP地址相同的问题
  • 【问题排查】hadoop-shaded-guava依赖问题
  • 百度地图网页版在线使用搜索引擎优化搜索优化
  • 网站优化排名兰州网站建设尚美
  • leetcode 3217 从链表中移除在数组中存在的节点
  • C++音视频就业路线
  • 46-基于STM32的智能宠物屋设计与实现
  • blender实现手柄控制VR视角
  • 八股训练营第 2 天 | HTTP请求报文和响应报文是怎样的,有哪些常见的字段?HTTP有哪些请求方式?GET请求和POST请求的区别?
  • 【LUT技术专题】SVDLUT: 基于SVD优化的3DLUT
  • 阿里云企业邮箱怎么申请宿迁网站建设SEO优化营销
  • Linux文件搜索完全指南:find、locate和通配符使用详解
  • PyTorch:AI时代的深度学习利器
  • Linux:探究HTTP协议
  • linux实现设备驱动-字符型设备驱动
  • 门户网站排版有引导的网站
  • Linux USB 子系统深度解析
  • Linux time function in C/C++【2】
  • 人工智能学习中深度学习之python基础之迭代器、生成器、文件处理和模块等
  • wordpress显示评论数福建企业seo推广
  • 12.C++:模版进阶
  • 大模型训练评估中的交叉验证详解
  • 变更股东怎样在工商网站做公示做网站的收费标准
  • (142页PPT)立白MES解决方案1Wonderware运营管理平台(附下载方式)
  • 机器学习日报10
  • Linux 2.6.10 调度器负载均衡机制深度解析:从理论到实现
  • 访链家网网站开发嘉定房地产网站建设
  • 多商户商城APP源码开发的未来方向:云原生、电商中台与智能客服