返回顶部
首页 > 资讯 > 操作系统 >LeetCode 面试题 02.01. 移除重复节点
  • 347
分享到

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

leetcode算法职场和发展c# 2023-08-30 16:08:28 347人浏览 泡泡鱼
摘要

文章目录 一、题目二、C# 题解 一、题目   编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。   点击此处跳转题目。 示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3] 示例2:

一、题目

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

  点击此处跳转题目

示例1:

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

示例2:

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

提示:

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

进阶:

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

二、C# 题解

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

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;        // 更新 q            if (q == null) break;            int v = q.val;     // 取出 p 指向的元素值            // 依据 v 对 p 进行操作            if (map.ContainsKey(v)) p.next = q.next; // 重复值,则跳过 q            else p = q;  // 非重复值,p 挪下一位        }        return head;    }}
  • 时间复杂度: O(n) O(n) O(n)
  • 空间复杂度: O(n) O(n) O(n)

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

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)

来源地址:https://blog.csdn.net/zheliku/article/details/132506962

--结束END--

本文标题: LeetCode 面试题 02.01. 移除重复节点

本文链接: https://lsjlt.com/news/383259.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作