算法刷题——删除排序链表中的重复元素(力扣)

文章目录

  • 题目描述
  • 我的解法
    • 思路
    • 结果
    • 分析
  • 官方题解
    • 分析
  • 查漏补缺
  • 更新日期
  • 参考来源

题目描述

传送门
删除排序链表中的重复元素:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。

示例 1:
在这里插入图片描述
输入:head = [1,1,2]
输出:[1,2]

示例 2:
在这里插入图片描述
输入:head = [1,1,2,3,3]
输出:[1,2,3]

提示

  • 链表中节点数目在范围 [0, 300] 内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序 排列

我的解法

/**
 * 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 == nullptr) return nullptr;
        ListNode* slow = head;
        ListNode* fast = head->next;

        while(fast != nullptr){
            // 快指针对应节点的值等于慢指针对应节点的值,并且快指针不是表尾,跳过重复元素
            if(fast->val == slow->val && fast->next != nullptr){
                fast = fast->next;
            }
            // 快指针对应节点的值等于慢指针对应节点的值,但是快指针是表尾,此时将慢指针指向nullptr,然后结束循环
            else if(fast->val == slow->val && fast->next == nullptr){
                slow->next = nullptr;
                break;
            }
            // 快指针对应节点的值不等于慢指针对应节点的值
            else{
                slow->next  = fast;
                slow = fast;
                fast = fast->next;
            }
        }
        return head;

    }
};

思路

由于链表本身是已排序的,所以相等的元素一定相邻,所以考虑使用快慢指针法,通过快指针跳过重复的元素来解决问题。但是有一个关键点,如果链表末尾存在重复元素,则不能通过快指针跳过,否则链表末尾重复的元素无法去掉,这种情况需要单独考虑。

结果

在这里插入图片描述

分析

时间复杂度
循环遍历链表,O(n)

空间复杂度
O(1)

官方题解

/**
 * 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* cur = head;
        while (cur->next) {
            if (cur->val == cur->next->val) {
                cur->next = cur->next->next;
            }
            else {
                cur = cur->next;
            }
        }

        return head;
    }
};

分析

时间复杂度:
O(n),其中n是链表的长度。

空间复杂度:
O(1)

查漏补缺

对于链表的跳过某些元素,通过一个节点便可以实现,改变节点的指针,并不需要双指针法。

更新日期

2024.1.14
欢迎前来讨论指正。

参考来源

力扣链接

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

细说JavaScript BOM之HTML5新特性

1、applicationCache对象 什么是Application Cache呢&#xff1f;HTML5引入了应用程序缓存技术&#xff0c;意味着Web应用可进行缓存&#xff0c;并在没有网络的情况下使用&#xff0c;通过创建cache manifest文件&#xff0c;可以轻松的创建离线应用。 Application Cache带来…

数字创意市场:Web3时代创作者的新机遇

随着Web3时代的崭露头角&#xff0c;数字创意市场正迎来全新的变革和机遇。在这个数字化的时代&#xff0c;创作者们将面对更加开放、去中心化的创作和交易环境。本文将深入探讨Web3时代数字创意市场为创作者带来的新机遇&#xff0c;以及这个时代为创意产业带来的变革。 创作者…

2024 Move 开发者大会精彩回顾|共赴 Move 生态的无限未来

2024 年的 Move 开发者大会是 Move 生态的一场大型的线下盛事。Move 的优异特性、Move 的高光发展、Move 的未来潜力……无不引领着开发者、投资人等一众业内人士加入建设可持续的 Move 生态世界。 在去中心化、安全性和可扩展性等 Web3 关键议题不断涌现之时&#xff0c;Move …

YOLOv5全网独家首发:DCNv4更快收敛、更高速度、更高性能,效果秒杀DCNv3、DCNv2等 ,助力检测实现暴力涨点

💡💡💡本文独家改进:DCNv4更快收敛、更高速度、更高性能,完美和YOLOv5结合,助力涨点 DCNv4优势:(1) 去除空间聚合中的softmax归一化,以增强其动态性和表达能力;(2) 优化存储器访问以最小化冗余操作以加速。这些改进显著加快了收敛速度,并大幅提高了处理速度,DCN…

python数字图像处理基础(七)——直方图均衡化、傅里叶变换

目录 直方图均衡化均衡化原理均衡化效果标准直方图均衡化自适应直方图均衡化 傅里叶变换原理低通滤波高通滤波 直方图均衡化 均衡化原理 图像均衡化是一种基本的图像处理技术&#xff0c;通过更新图像直方图的像素强度分布来调整图像的全局对比度。这样做可以使低对比度的区域…

新品上市如何做好内容营销?

当新品上市面向用户销售时&#xff0c;其中的关键环节就是内容营销&#xff0c;只要有一套完整的内容营销策略&#xff0c;那在新品上市时就可以取得不错的成绩&#xff0c;今天媒介盒子就来和大家聊聊&#xff1a;新产品上市如何做好内容营销。 一、 结合不同层次需求 1.用…

Mac系统数据占用太多怎么清理 mac怎么清除下载的软件

在我们使用MacBook电脑的过程中&#xff0c;经常会遇到一个常见的问题&#xff0c;那就是储存空间不足。当我们的硬盘空间被占满的时候&#xff0c;系统的运行速度可能会变得缓慢&#xff0c;并且我们无法保存新的文件或者安装新的应用程序。要解决这个问题&#xff0c;清理缓存…

react native Gradle的原国外地址、本地下载、国内阿里腾讯镜像三种下载配置

一、国外地址&#xff1a;&#xff08;初始项目默认&#xff09; 下载地址&#xff1a;https://services.gradle.org/distributions/ 文件地址见下图&#xff1a; 注意&#xff1a;这个地址下载十次就有九次是连接超时&#xff0c;建议换另外两种方法 二、下载到本地&#x…

什么是SFP光学模块?

SFP光模块是一个十亿位电信号到光信号接口设备&#xff0c;是行业标准的小型可插拔千兆光收发器模块&#xff0c;集成可插拔交换机&#xff0c;路由器和其他网络设备&#xff0c;媒体转换器SFP端口&#xff0c;用于连接到光或铜线数据传输网络&#xff0c;我们通常可以在以太网…

什么是关键字?C语言的关键字有哪些?

目录 一、问题 二、解答 1、数据类型关键字&#xff08;12个&#xff09; (1) 声明和定义的区别 (2) 数据类型关键字 • char&#xff1a;声明字符型变量 1、声明字符变量 2、字符数组 3、ASCII码表示 4、指针与字符数组 5、多字节字符集&#xff08;如UTF-8&#xff…

Flask 与 小程序 加入购物车功能

构建数据库 common/models/member/MemberCart.py DROP TABLE IF EXISTS member_cart;CREATE TABLE member_cart (id int(11) unsigned NOT NULL AUTO_INCREMENT,member_id bigint(20) NOT NULL DEFAULT 0 COMMENT 会员id,food_id int(11) NOT NULL DEFAULT 0 COMMENT 商品id,q…

晶格动力学 GULP 软件的安装步骤

---------------------------------------------------------------------- GULP软件现已发展到5.2版本&#xff0c;其使用Fortran编译器&#xff0c;可运行在Linux/Unix系统下&#xff0c;但不提供任何Windows版本的技术支持。 下载网址&#xff1a; http://gulp.curtin.ed…

安卓屏幕自动息屏时亮度突然变亮

自然息屏流程 USER_ACTIVITY_SCREEN_BRIGHT&#xff08;亮屏&#xff09; → USER_ACTIVITY_SCREEN_DIM&#xff08;DIM&#xff09; → USER_ACTIVITY_SCREEN_DREAM&#xff08;灭屏&#xff09;变化&#xff0c;最终进入ASLEEP后。在息屏时会执行一个变暗的动画 frameworks\…

ABAP IDOC 2 XML

有个需求&#xff0c;外围系统希望我们给到一个IDOC 记录的样例&#xff0c;但是我们we02中并无法看到 就找了一个demo去直接展示IDOC内容 *&---------------------------------------------------------------------* *& Report Z_IDOC_TO_XML *&------------…

归并排序(C语言)

目录 1.归并排序图解 2.归并排序&#xff08;递归版&#xff09; 3.归并排序&#xff08;非递归版&#xff09; 1.归并排序图解 归并排序的核心思想是让左右两边有序的部分进行合并比较排序&#xff0c;具体什么意思呢&#xff1f;分两点&#xff1a; 1.分&#xff1a;左右两边…

HBuilderx使用Git插件配置并上传代码(使用小乌龟)

待整理参考 1.Hbuilder安装git插件 检查 HBuilderx 是否安装 git插件 &#xff08;如果没有请自行安装&#xff09; 右键项目可以出现 安装小乌龟 https://tortoisegit.org/download/

[C++] VS 2022演练 - 创建和使用静态连接库(Static Lib) (详细图文)

什么是静态连接库? 静态连接库是一种将代码编译成二进制可执行文件时使用的库。在静态链接库中,代码被直接嵌入到可执行文件中,而不是作为外部库单独链接。这意味着当程序运行时,不需要额外的依赖项或库文件。 使用静态连接库的优点是减少了对外部依赖的需求,并且可以更…

力扣hot100 完全平方数 完全背包 滚动数组 四平方和定理

Problem: 279. 完全平方数 文章目录 思路&#x1f496; 完全背包&#x1f496; 滚动数组优化&#x1f496; 四平方和定理 思路 &#x1f468;‍&#x1f3eb; 三叶神解 &#x1f468;‍&#x1f3eb; 数学解法 &#x1f496; 完全背包 ⏰ 时间复杂度: O ( n 2 n ) O(n^2 …

【开源】基于JAVA语言的河南软件客服系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统管理人员2.2 业务操作人员 三、系统展示四、核心代码4.1 查询客户4.2 新增客户跟进情况4.3 查询客户历史4.4 新增服务派单4.5 新增客户服务费 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的河…

Springboot日志框架logback与log4j2

目录 Springboot日志使用 Logback日志 日志格式 自定义日志格式 日志文件输出 Springboot启用log4j2日志框架 Springboot日志使用 Springboot底层是使用slf4jlogback的方式进行日志记录 Logback日志 trace&#xff1a;级别最低 debug&#xff1a;调试级别的&#xff0c…