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

LeetCode 面试题 02.01. 移除重复节点

文章目录

  • 一、题目
  • 二、C# 题解

一、题目

  编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

  点击此处跳转题目。

示例1:

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

示例2:

输入:[1, 1, 1, 1, 2]
输出:[1, 2]

提示:

  • 链表长度在[0, 20000]范围内。
  • 链表元素在[0, 20000]范围内。

进阶:

  • 如果不得使用临时缓冲区,该怎么解决?

二、C# 题解

  使用哈希表记录出现的数字,只需要一次遍历即可:

/*** Definition for singly-linked list.* public class ListNode {*     public int val;*     public ListNode next;*     public ListNode(int x) { val = x; }* }*/
public class Solution {public ListNode RemoveDuplicateNodes(ListNode head) {Dictionary<int, bool> map = new Dictionary<int, bool>();ListNode p = head, q;  // 双指针,q 指向 p 的后一个元素while (p != null) {map[p.val] = true; // 记录 p 指向的元素q = p.next;        // 更新 qif (q == null) break;int v = q.val;     // 取出 p 指向的元素值// 依据 v 对 p 进行操作if (map.ContainsKey(v)) p.next = q.next; // 重复值,则跳过 qelse p = q;                              // 非重复值,p 挪下一位}return head;}
}
  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

如果不使用临时缓冲区,则需要每个元素依次检查,进行多次遍历:

/*** Definition for singly-linked list.* public class ListNode {*     public int val;*     public ListNode next;*     public ListNode(int x) { val = x; }* }*/
public class Solution {public ListNode RemoveDuplicateNodes(ListNode head) {ListNode p = head, q; // 双指针while (p != null) {int v = p.val; // 取出 p 指向元素的值q = p;         // q = p 代替 p进行遍历// 出现 v 则删,否则跳到下一个while (q.next != null) {if (q.next.val == v) q.next = q.next.next;else q = q.next;}p = p.next;    // 更新 p}return head;}
}
  • 时间复杂度: O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度: O ( 1 ) O(1) O(1)
http://www.lryc.cn/news/140180.html

相关文章:

  • 【Java8特性】——Stream API
  • grep命令的用法
  • 【无标题】jenkins消息模板(飞书)
  • 2023年国赛 高教社杯数学建模思路 - 案例:随机森林
  • element Collapse 折叠面板 绑定事件
  • CSS :mix-blend-mode、aspect-ratio
  • Module not found: Error: Can‘t resolve ‘less-loader‘解决办法
  • 量化QAT QLoRA GPTQ
  • CentOS下查看 ssd 寿命
  • Node基础--npm相关内容
  • Python图片爬虫工具
  • 制造执行系统(MES)在汽车行业中的应用
  • Spring与Mybatis集成且Aop整合
  • 【nonebot-plugin-mystool】快速安装使用nonebot-plugin-mystool
  • js实现数据关联查找更新。数据求和验证
  • 区块链上地址与银行账户有什么区别?
  • CF 148 D Bag of mice(概率dp求概率)
  • 引入本地 jar 包教程
  • 优维产品最佳实践第5期:什么是持续集成?
  • 空时自适应处理用于机载雷达——元素空间空时自适应处理(Matla代码实现)
  • 聚观早报 | 青瓷游戏上半年营收3.34亿元;如祺出行冲击IPO
  • 硅谷的魔法:如何塑造了全球技术的未来
  • (三)行为模式:4、迭代器模式(Iterator Pattern)(C++示例)
  • React Antd form.getFieldsValue() 和 form.getFieldsValue(true) 有区别吗?
  • 浅谈Java中的观察者模式
  • C++:命名空间,缺省参数,函数重载,引用,内联函数
  • 2.Vue报错Cannot read properties of undefined (reading ‘then‘)
  • 【LeetCode 】数组简介
  • 一文解析block io生命历程
  • Python爬虫学习之旅:从入门到精通,要学多久?