【算法】删除链表中重复元素

news2025/2/5 22:12:07

本题来源---《删除链表中重复元素》。

题目描述

        给定一个已排序的链表的头 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;
 *     struct ListNode *next;
 * };
 */
struct ListNode* deleteDuplicates(struct ListNode* head)
{

}

关于本题,我整理了两种解题方法:

第一种:单指针

第二种:双指针

第一种:单指针

解题思路:

(1)声明一个指针指向头结点,比较cur指向的data域与cur->next指向的data域是否相等。

(2)如果相等,则删除该结点。

 (3)如果不相等,移动cur指针,继续比较。

 代码如下:

struct ListNode* deleteDuplicates(struct ListNode* head)
{
    struct ListNode     *cur,*tmp;
    cur = head;

    if( !head )
    {
        return NULL;
    }
    while( cur->next )
    {
        if( cur->val == cur->next->val )
        {
            tmp = cur->next;
            cur->next = cur->next->next;
            free(tmp);
        }
        else
        {
            cur = cur->next;
        }
    }
    return head;
}

复杂度分析

        时间复杂度:O(n)

        空间复杂度:O(1)

第二种:双指针

解题思路:

(1)声明两个指针,第一个指针cur指向head,第二个指针ptr指向head->next。比较cur指向的data域与ptr指向的data域是否相等。

 (2)如果相等,则删除该结点。

 (3)如果不相等,移动cur、ptr指针,继续比较。

代码如下:

struct ListNode* deleteDuplicates(struct ListNode* head)
{
    struct ListNode     *cur,*ptr,*tmp;

    if( !head )
    {
        return NULL;
    }

    cur = head;
    ptr = head->next;

    while( ptr )
    {
        if( cur->val != ptr->val )
        {
            cur = cur->next;
            ptr = ptr->next;
        }
        else
        {
            tmp = ptr;
            cur->next = ptr->next;
            ptr = ptr->next;
            free(tmp);
        }
    }
    return head;
}

复杂度分析

        时间复杂度:O(n)

        空间复杂度:O(1)

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

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

相关文章

java-生产者消费者

目录 1.生产者消费者1.1生产者和消费者模式概述【应用】1.2生产者和消费者案例【应用】1.3生产者和消费者案例优化【应用】1.4阻塞队列基本使用【理解】1.5阻塞队列实现等待唤醒机制【理解】 1.生产者消费者 1.1生产者和消费者模式概述【应用】 概述 生产者消费者模式是一个十…

惯用Python的5个技巧(循环)

在这篇文章中&#xff0c;你将看到5种方法可以使你的python循环更习惯&#xff0c;运行得更快&#xff0c;内存效率更高。 在我看来&#xff0c;Python是计算机科学中最简单、最通用的语言之一。如果你正确地编写python代码&#xff0c;很难区分python代码和伪代码。但有时&…

零基础学Python爬虫,一文教你入门!

Python被认作是人工智能和机器学习的基础语言&#xff0c;而数据科学和人工智能又有着密切的交集。因此&#xff0c;Python被视为数据科学领域应用最广泛的语言并不会令人感到意外。 现在让我们一同来回顾一下数据科学处理问题过程中的各个步骤&#xff0c;以此来进一步了解Pyt…

告别百年激进笔记

系列文章目录 八次危机笔记 告别百年激进笔记 文章目录 系列文章目录前言导图第一部分 资本全球化的宏大叙事第一节 人类创造的两个异化物第二节 全球资本化与制度性致贫第三节 国家竞争的“微笑曲线”第四节 欧债危机实属政治危机第五节 日本研究中的另类思考第六节 从…

四足机器人应用篇之solidwork导出URDF

欢迎关注微信公众号 “四足机器人研习社”&#xff0c;本公众号的文章和资料和四足机器人相关&#xff0c;包括行业的经典教材、行业资料手册&#xff0c;同时会涉及到职业知识学习及思考、行业发展、学习方法等一些方面的文章。 |1.URDF介绍 一个URDF pakage示例 urdf是ROS用于…

【Altium Designer 20 笔记】PCB线宽与过孔尺寸

电源线&#xff1a;40mil1A&#xff08;一般翻倍给&#xff09;,地线比电源线粗一点即可&#xff1b;信号线&#xff1a;10-15mil 一、线宽 市电的火线和零线&#xff1a;80-100mil12V /24V 20mil~60mil 5V 20-30mil 3V 20-30mil GND 越宽越好20-30mil普通信号线 10mil-15mil…

element-ui的按需引入报错解决:MoudleBuildFailed,完整引入和按需引入

官网&#xff1a; Element - The worlds most popular Vue UI framework 1.完整引入 &#xff08;1&#xff09;下载&#xff1a; npm i element-ui -S &#xff08;2&#xff09;引入&#xff1a; 在 main.js 中写入以下内容&#xff1a; import Vue from vue; impor…

如何连通私有子网中的 MSK / Kafka 集群?

MSK 集群通常都是建在私有子网中的&#xff0c;这给本地访问带来了很多麻烦&#xff0c;特别是需要在本地使用 Kafka GUI 客户端管理和读写 MSK 数据的时候。本文会给出一套解决方案。 我们这里讨论的问题有一点特殊性&#xff0c;那就是&#xff1a;由于 MSK 是托管服务&…

在Vue3中如何使用H.265视频流媒体播放器EasyPlayer.js?

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;可支持H.264与H.265编码格式&#xff0c;性能稳定、播放流畅&#xff0c;能支持WebSocket-FLV、HTTP-FLV&#xff0c;HLS&#xff08;m3u8&#…

JavaFX项目环境配置

Java版本 JDK15 JavaFX版本 JavaFX SDK 17 sdk下载地址https://gluonhq.com/products/javafx/ https://gluonhq.com/products/javafx/ Java FX sdk 版本不要选择22版本 与 jdk15版本不合 编辑器 配置Eclipse JDK15环境 点击Add 第二步新建一个javafx项目 点击next 勾选Ja…

基于SpringBoot+Vue的卓越导师双选系统设计与实现(源码+文档+包运行)

一.系统概述 如今的信息时代&#xff0c;对信息的共享性&#xff0c;信息的流通性有着较高要求&#xff0c;因此传统管理方式就不适合。为了让导师选择信息的管理模式进行升级&#xff0c;也为了更好的维护导师选择信息&#xff0c;卓越导师双选系统的开发运用就显得很有必要。…

打破常规:AI如何帮助从业者规避营销活动风险

人工智能时代&#xff1a;如何利用AI提升营销效果 在当今商界&#xff0c;市场策划活动对于企业来说至关重要&#xff0c;它们不仅可以吸引消费者的注意&#xff0c;还可以扩大企业的市场份额。然而&#xff0c;这些活动本身带来的风险也不容忽视。为了帮助企业在策划活动时做出…

阿里云服务器带宽收费标准——2024年最新公网带宽价格

阿里云服务器的公网带宽计费模式分为“按固定带宽”和“按使用流量”&#xff0c;有什么区别&#xff1f;按固定带宽是指直接购买多少M带宽&#xff0c;比如1M、5M、10M、100M等&#xff0c;阿里云直接分配用户所购买的带宽值&#xff0c;根据带宽大小先付费再使用&#xff1b;…

06_定时器中断

72分频 72MHz 72000000 经过72分频 1000000

HarmonyOS开发实例:【事件的订阅和发布】

介绍 本示例主要展示了公共事件相关的功能&#xff0c;实现了一个检测用户部分行为的应用。具体而言实现了如下几点功能&#xff1a; 1.通过订阅系统公共事件&#xff0c;实现对用户操作行为&#xff08;亮灭屏、锁屏和解锁屏幕、断联网&#xff09;的监测&#xff1b; 2.通…

Navigator.share不生效,请检查是不是https,仅在https中可用

mdn 一定要检查mdn的兼容性&#xff0c;和是否是https&#xff0c;http中是不生效的&#xff0c;但是测试的时候ios Safari可以chrome就不行&#xff0c;但是https就能够稳定运行

英语新概念2-回译法-lesson8

乔桑德斯有着我们镇上最漂亮的花园。附近的每一个人每年都参加“最美花园比赛”&#xff0c;但是每年都是乔赢得比赛。比尔芙丽丝的花园比乔的花园大&#xff0c;但是乔的花园更有趣。他有整洁的小径以及一座木桥架在一个池塘上。我也喜欢花园&#xff0c;但是我不喜欢辛勤劳作…

LeetCode 热题100(python)——1

解题方案 解法一 class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:for i, x in enumerate(nums): # xnums[i]for j in range(i 1, len(nums)): # 枚举 i 右边的 jif x nums[j] target: # 满足要求return [i, j] # 返回两个数的下标# 这…

HarmonyOS实战开发-如何实现文件管理相关的功能。

介绍 本示例主要展示了文件管理相关的功能&#xff0c;使用ohos.multimedia.medialibrary 、ohos.filemanagement.userFileManager 、ohos.fileio 、ohos.file.fs、ohos.app.ability.contextConstant 等接口&#xff0c;实现了增添文件、删除文件、查找指定类型文件文件、复制…

electron项目打包慢、打包报错

项目使用了electron框架&#xff0c;在第一次打包或者网络条件不好的环境下进行打包时熟速度慢的出奇&#xff0c;甚至经常出现打包失败的情况&#xff08;如上面图片的报错&#xff09;。 这是因为&#xff0c;在electron打包的过程中&#xff0c;需要去官方源https://github.…