[M链表] lc82. 删除排序链表中的重复元素 II(单链表+好题+模拟)

文章目录

    • 1. 题目来源
    • 2. 题目解析

1. 题目来源

链接:82. 删除排序链表中的重复元素 II

相似题目:[E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)

2. 题目解析

这个题目与 83 题都很类似,一个是将重复元素全部删除,另一个是将重复元素至多保留一个。注意以下几点即可:

  • 本题可能一个节点都不存在,且头结点也可能被删除发生改变。所以需要应用到虚拟头结点的这个技术。
  • 我们需要在链表中找到值相同的这一段链表,首位指针分别用 a,b 来标识,那么构成一个 [a, b) 区间,例如:1->2->3->3->3->4->NULL 链表,那么此时 a–>3(1),b指向4。显然,我们只需要让 a 的前一个指针的 next 指向 b 指针位置,即 a->next=b 即可。所以我们需要知道,3 的前一个位置,即 2 所在位置的指针。如果 2 的next的next 指针元素 b 与 2 的next 指针 a 一致,那么 b 指针向后移动,过滤掉重复元素,直到不相等的时候,现在有两种可能的情况:
    • 中间是没有重复元素的,不需要跳过重复元素
      • 没有重复元素,意味着 2 的 next 的 next 元素与 b 一致。此时就没有跳过任何元素,则 2 的这个指针向后一定一位即可。
    • 中间是有重复元素的,需要跳过重复元素
      • 反之,2 的这个指针需要指向 b 指针,跳过中间的重复元素。
  • 最终返回虚拟头结点的 next 指针即可
    在这里插入图片描述
    注意体会两点:
  • 找到重复元素段后,针对当前节点的 next 指针赋值,要区分情况。有重复段和无重复段,next 指针指向的位置是不一样的。
  • 比较两个链表元素节点是否一样,应该直接用 节点之间的 ==,而不是 val 的 == 哈

  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( 1 ) O(1) O(1)

// @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* deleteDuplicates(ListNode* head) {if (!head)return head;ListNode* dummy = new (ListNode){0, head};ListNode *a = dummy;while (a->next) {ListNode *b = a->next->next;while (b && (b->val == a->next->val)) b = b->next;if (a->next->next == b) a = a->next;else a->next = b;}return dummy->next;}
};
// @lc code=end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/625617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试宝典之ElasticSearch面试题

E01、什么是倒排索引? ES分词器通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索…

检索增强生成的多模态信息:综述

英文原文地址:Retrieving Multimodal Information for Augmented Generation: A Survey 随着大型语言模型(LLMs)的流行,出现了一个重要趋势,即使用多模态来增强 LLMs 的生成能力,从而使 LLMs 能够更好地与…

Github项目推荐-clone-voice

项目地址 GitHub - jianchang512/clone-voice 项目简述 一个声音ai工具。基于python编写。作用是音色复用。下面是官方说明:“这是一个声音克隆工具,可使用任何人类音色,将一段文字合成为使用该音色说话的声音,或者将一个声音使…

行为型设计模式——模板方法模式

学习难度:⭐ ,比较常用 模板方法模式 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知&#xff0…

SpringBoot项目的两种发布方式(jar包和war包)

SpringBoot项目的两种发布方式&#xff08;jar包和war包&#xff09; 在springboot入门和项目示例这个项目和application.yml配置端口号和访问url路径基础上进行修改 1、使用jar包方式发布 1.1、在pom.xml中添加一个SpringBoot的构建的插件 <build><plugins>&l…

腾讯云服务器多少钱?2024年腾讯云服务器报价明细表

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

测试人,你还在写用例吗?是什么在支撑着你写?

测试交付的过程&#xff0c;通常是伴随的是一个测试用例生命周期过程&#xff0c;通常有测试需求分析、测试用例设计、测试用例实现、测试用例执行&#xff0c;以及测试用例管理等几个阶段组成。 为什么要有测试用例&#xff1f; 首先测试用例这是测试岗位的基本交付物之一。开…

第10章-特殊函数-贝塞尔函数

贝兹函数又称贝塞尔曲线&#xff0c;是计算机图形学中相当重要的参数曲线&#xff0c;在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。 贝塞尔函数由线段和节点组成&#xff0c;节点是可拖动的支点&#xff0c;线段像可伸缩的皮筋&#xff0c;通过 控制曲线上的4个点&…

LeetCode 144. 94. 145. 二叉树的前序,中序,后续遍历(详解) ੭ ᐕ)੭*⁾⁾

经过前面的二叉树的学习&#xff0c;现在让我们实操来练练手~如果对二叉树还不熟悉的小伙伴可以看看我的这篇博客~数据结构——二叉树&#xff08;先序、中序、后序及层次四种遍历&#xff08;C语言版&#xff09;&#xff09;超详细~ (✧∇✧) Q_Q-CSDN博客 144.二叉树的前序遍…

GitHub要求所有贡献代码的用户在2023年底前启用双因素认证

到2023年底&#xff0c;所有向github托管的存储库贡献代码的用户都必须启用一种或多种形式的2FA。 双重身份认证 所谓双重身份认证&#xff08;Two-Factor Authentication&#xff09;&#xff0c;就是在账号密码以外还额外需要一种方式来确认用户身份。 GitHub正在大力推动双…

你知道程序员如何利用citywork实现财富自由吗?

周末到了&#xff0c;我要去citywalk寻找心灵的呼吸&#xff01;”有谁没有设想过疲惫的工作日之后好好地去走一走&#xff0c;亲近大自然呢&#xff1f;谁又不想在闲暇之余唤起对生活的趣味呢&#xff1f;可是对于我们悲催的打工人而言&#xff0c;没有citywalk&#xff0c;只…

代码随想录训练营day2

一、有序数组的平方 1.1暴力解法 可以直接使用C当时自带的排序算法库函数进行计算&#xff0c;属于暴力解法&#xff0c;复杂度较高&#xff0c;那么有没有运行效率更高的算法思想呢&#xff1f; class Solution { public:vector<int> sortedSquares(vector<int&g…

1.5 面试经典150题 - 轮转数组

轮转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 注意&#xff1a;本题需要原地操作 class Solution(object):def rotate(self, nums, k):""":type nums: List[int]:type k: int:rtype: None Do not…

class_5:在c++中一个类包含另一个类的对象叫做组合

#include <iostream> using namespace std;class Wheel{ public://成员数据string brand; //品牌int year; //年限//真正的成员函数void printWheelInfo(); //声明成员函数 };void Wheel::printWheelInfo() {cout<<"我的轮胎品牌是&#xff1a;"<…

任务10:安装配置Java开发环境

任务描述 知识点&#xff1a; Java开发工具Maven配置 重 点&#xff1a; 安装配置Java开发工具 IDEA为IDEA配置自定义Maven&#xff08;国内源&#xff09; 内 容&#xff1a; 下载并配置JDK 1.8下载安装IDEA为IDEA配置自定义MavenWindows环境安装配置Hadoop 任务指导…

C++学习笔记(二十二)

一、函数对象 1. 函数对象概念 概念&#xff1a; 重载函数调用操作符的类&#xff0c;其对象常称为函数对象函数对象使用重载的 () 时&#xff0c;行为类似函数调用&#xff0c;也叫仿函数 本质&#xff1a; 函数对象(仿函数)是一个类&#xff0c;不是一个函数 2. 函数对…

Leetcode面试经典150题刷题记录 —— 二叉搜索树篇

Leetcod面试经典150题刷题记录-系列Leetcod面试经典150题刷题记录——数组 / 字符串篇Leetcod面试经典150题刷题记录 —— 双指针篇Leetcod面试经典150题刷题记录 —— 矩阵篇Leetcod面试经典150题刷题记录 —— 滑动窗口篇Leetcod面试经典150题刷题记录 —— 哈希表篇Leetcod面…

Python从入门到网络爬虫(正则表达详解)

Python 正则表达式 正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起增加了re 模块&#xff0c;它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。 compile 函数根…

C#/.NET学习值得推荐的在线论坛和技术社区

前言 本文来源于知乎的一个提问&#xff0c;C#/.NET程序员学习有哪些值得推荐的在线论坛和技术社区&#xff1f;其实很早之前DotNetGuide就已经新增了C#/.NET/.NET Core充电站栏目&#xff0c;当然大家有更好的.NET相关学习站点和资源欢迎PR投稿&#x1f91e;。 GitHub - YSGS…

GO——cobra

定义 Cobra 是 Go 的 CLI 框架 CLI&#xff0c;command-line interface&#xff0c;命令行界面 使用 注意 第一个cmd的USE即使命名了也没有意义&#xff0c;一般保持和项目名一致。 示例 package mainimport ("fmt""github.com/spf13/cobra" )func …