【拿捏链表(Ⅱ)】—Leetcode删除排序链表中的重复元素

news2025/1/5 10:12:57

目录

  • 删除排序链表中的重复元素(Ⅰ)
  • 删除排序链表中的重复元素(Ⅱ)

删除排序链表中的重复元素(Ⅰ)

题目:

给定一个已排序的链表的头 head ,删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。在这里插入图片描述

思路:这里的思路很简单,定义两个指针,一个指向head,一个指向head的后一个节点,然后遍历进行比较即可。不相同就尾插,相等就跳过(这里注意要先判断head是否为空,防止空指针解引用,还有就是tail最后一定要置空(野指针))。如下图:
在这里插入图片描述
ok,整理好思路后开始写代码,也很简单:

struct ListNode* deleteDuplicates(struct ListNode* head){
    //判空
    if(head == NULL)
    {
        return NULL;
    }
    struct ListNode*cur=head->next;
    struct ListNode*tail=head;
    //遍历
    while(cur)
    {
        //不相等尾插,相等cur就继续往后走
        if(tail->val != cur->val)
        {
            tail->next=cur;
            tail=cur;
        }
        cur=cur->next;
    }
    //最后置空,防止野指针
    tail->next=NULL;;
    return head;
}

删除排序链表中的重复元素(Ⅱ)

题目:

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表
在这里插入图片描述

思路:该题是上题的升级版本,稍稍复杂了一点点,不过核心思想是一样的,为非就是遍历,然后比较。这里我们用哨兵卫的单链表,方便我们对节点进行比较。
cur指针从哨兵卫开始,对后面的两个节点进行比较,如果不相等,就进行尾插,如果相等的话,将这个值用tmp保存下来,然后让cur的next往后走,直到找到与该值不相等的,再进行与后面的节点比较是否相等,循环往后走,直到cur->next->next与cur->next 为 NULL。如下图(多画图会很容易理解)

在这里插入图片描述
代码实现:

struct ListNode* deleteDuplicates(struct ListNode* head){
    //判空
    if(head == NULL)
    {
        return NULL;
    }
    //哨兵卫
    struct ListNode*phead=(struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode*cur=phead;
    phead->next=head;
    //进行遍历比较
    while(cur->next && cur->next->next)
    {
        //相等
        if(cur->next->val == cur->next->next->val)
        {
            //用tmp记录,然后next往后找到与tmp不同的,再与cur->next->next比较
            int tmp=cur->next->val;
            while(cur->next&&cur->next->val==tmp)
            {
                cur->next=cur->next->next;
            }
            //走到这,说明找到了与tmp不同的值,或者到空节点停止了,非空就再次进入循环,进行比较
        }
        //不相等,cur尾插
        else
        {
            cur=cur->next;
        }
    }
    //记录哨兵卫节点的下一个节点,然后释放哨兵卫头节点
    //(注意,其实OJ题里面不进行释放,内存泄漏不会报错,也会提示通过的,但还是好习惯一点)
    struct ListNode*pphead=phead->next;
    free(phead);
    return pphead;

}

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

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

相关文章

Navigation--导航算法(局部视野导航)--DWA、TAB

DWA 动态窗口法(dynamic window approach,DWA)目前与A*一样都是ROS导航包中提供的基本路径规划算法。DWA是一种贪心的算法,通过可选速度、可选角速度的组合,模拟出很多局部轨迹,然后选择最优的。这种方法时…

Android dex动态加载(Kotlin版)

前言 环境 语言–KotlinJDK11SDK33AndroidStudio版本 Android Studio Dolphin | 2021.3.1 Patch 1 Build #AI-213.7172.25.2113.9123335, built on September 30, 2022概述 libaray项目打包成jarjar通过dx命令行工具转为dex.jardex.jar放到assets目录下App启动读取assets中…

外贸业务12年,我想和大家分享这几点感受

如今再回看这段经历,很庆幸我的三观一直都很正确,那就是买家第一。 不管是什么原因,只要你想退,我都可以接受退,我不能退回上级供应商的那我就自己留着,只为了不想因为这一次拒绝而失去这个买家&#xff1…

springboot集成security(鉴权)

本文承接上一章节内容:springboot集成security(认证) 上一章节: https://blog.csdn.net/m0_54355172/article/details/128239128 1. 授予静态资源访问权限 因为我的演示案例涉及到多个页面,所以先说一下如何给静态资源…

数据挖掘——关联规则(Association Rule)Apriori算法和python代码实现

关联规则(Association Rule)什么是关联规则一些基本概念任务是什么Apriori 算法核心思想步骤与流程图如何找到候选集python代码实现什么是关联规则 关联规则(Association Rules)是反映一个事物与其他事物之间的相互依存性和关联性,是数据挖掘…

线程2的深度剖析

加锁 synchronized 1.修饰方法(普通方法,静态方法)普通方法实际上加到了this上,静态方法加到了类对象上。 2.修饰代码块 手动指定加到那个对象上 明确锁对象针对那个对象加锁,如果两个线程针对同一个对象加锁&am…

(1)AWD入门攻略大纲

1.比赛介绍 (1)比赛环境 (2)常见服务器信息介绍 比赛名称 白名单:一般用于防止外部恶意攻击,如果赛方发现名单以外IP可能会进行封禁处理。 服务器账号密码 Token和虚拟IP:token为提交答案的凭证,绑定了队伍;虚拟IP为…

SpringCloud中Feign注解@FeignClient参数一览表

写在前面 Feign是微服务中服务间调用的优选组件,后来的OpenFeign也是基于此来开展的。 为什么要梳理一下Feign注解FeignClient中的各个参数? 踩坑太多面试总问 参数一栏表 FeignClient的源码示例图如下: 今天我们接着来说最后的几个参数。…

Java面试题(六)美团JVM夺命7连问(灵魂拷问)

0.来看一道美团的面试题 这题直接把人给问懵逼了,你能全部答出来吗? Object o new Object();请解释对象的创建过程?DCL要不要加volatile问题?对象在内存中的存储布局?什么是指针压缩?对象头具体包含哪些…

生成树问题汇总

生成树问题汇总注1、最小(大)生成树思路代码例子:1、最小生成树结果是2、最大生成树结果2、在最小生成树中再加一条边,求新的最小生成树思路代码核心代码全部代码例子3、次小生成树思路:在上一个功能基础上进一步扩充代码核心代码全部代码例子4、判断最小…

一个轻量级的分布式日志标记追踪神器,十分钟接入,非常好用!

TLog简介 1、TLog通过对日志打标签完成企业级微服务的日志追踪。它不收集日志,使用简单, 产生全局唯一的追踪码。除了追踪码以外,TLog还支持SpanId和上下游服务信息 标签的追加。 2、为用户使用方便而设计,提供完全零侵入式接入…

es入门(上)

笔记来源于学习 b站中的【IT李老师】的elasticsearch课程 自己在实习做的es模块中的理解。 后续会有 中,下篇笔记更新,目前这一篇是上篇。 目录 Elastic Stack简介 1.1简介 1.2特色 1.3组件介绍 2.Elasticsearch的接收与核心概念 2.1搜索是什么…

【Keras+计算机视觉+Tensorflow】OCR文字识别实战(附源码和数据集 超详细必看)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一、OCR文字识别简介 利用计算机自动识别字符的技术,是模式识别应用的一个重要领域。人们在生产和生活中,要处理大量的文字、报表和文本。为了减轻人们的劳动,提高处理效率,从…

[python]初步练习脚本

之前练习的python,编写的脚本,现在作为记录,方便查看~ python 初步练习脚本基础部分的练习脚本脚本代码1、helloworld.py,有for循环语句2、main.py3、range—test.py,范围4、RE.py,花式输出内容5、turtle练…

Jekins安装和部署

1.官网下载 注意jekins各版本不同支持jdk的版本也不同 https://www.jenkins.io/download/ 如图进去后可看见最新版,而past releases是历史版本 查看自己各版本的支持 我下载的是2.346.1版本,是war包形式 2.启动jekins 直接在war包路径 java命令启动…

lspci命令整理

1. 作用: 显示当前主机的所有PCI总线信息 2. 常用指令: lspci -nn 第一列的数字:总线编号(Bus Number):设备编号(Device Number):功能编号(Function Number) 第一个中括…

全国青少年软件编程等级考试C语言标准解读(1_10级)

考试性质 全国青少年软件编程等级考试标准(C/C)由中国电子学会科普培训与应用推广中心指定。由全国青少年电子信息科普创新联盟标准工作组开发,由中国电子学会普及工作委员会审核通过,适用于由中国电子学会主办的青少年软件编程等…

vue中的process.env的理解

创建项目的时候突然发现好多前端有好多地方用到了这个process.env.xxxx但是发现其实我的新项目并没有定义这个内容,于是就对这个变量产生了好奇,这里总结一下 上图是我在node命令行下执行的查看了一下变量,看这情况直接是把系统的环境变量给…

少走弯路,关于在线客服系统的二三事

日常生活中,我们购买一个服务或一个商品时,时常会遇到以下场景: 售前咨询:向商家咨询服务的信息咨询、商品的规格产品咨询、以及商场活动、优惠咨询等 售后服务:商品使用问题、商品不满意退/换货等 在移动通信没有普…

Camera Surface 从应用到cameraserver的流转

一、Android相机应用与Surface Camera应用的预览一般通过SurfaceView去显示,SurfaceView作为显示的载体, Surface surface mSurfaceView.getSurfaceHolder().getSurface(); 获取的surface会通过Camera API1/API2的接口下发到framework层;…