【链表OJ】删除链表中重复的结点

news2024/9/21 14:17:01

⭐️ 往期链表相关OJ

💫链接1:链表分割
💫链接2:链表中倒数第k个结点(快慢指针问题)
💫链接3:leetcode 876.链表的中间结点(快慢指针问题)
💫链接4:leetcode 206.反转链表
💫链接5:leetcode 203.移除链表元素
💫链接6:合并两个有序链表
💫链接7:链表相交


⭐️ 题目描述

在这里插入图片描述

🌟 牛客链接:删除链表中重复的结点

图解和思路:
在这里插入图片描述

1️⃣ c代码:

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pHead ListNode类 
 * @return ListNode类
 */
struct ListNode* deleteDuplication(struct ListNode* pHead ) {
    // 空链表
    if (pHead == NULL) 
        return pHead;

    struct ListNode* cur = pHead;
    struct ListNode* prev = NULL;
    struct ListNode* next = pHead->next;

    while (next != NULL) {
        if (cur->val != next->val){
            prev = cur;
            cur = next;
            next = next->next;
        }  else {
            while ((next != NULL)  && (next->val == cur->val)) {
                next = next->next;
            }
            // 如果不相等 停下
            // 删除 [cur , next) 区间的元素
            while (cur != next) {
                // 保存下一个结点的位置
                struct ListNode* curNext = cur->next;
                free(cur);
                cur = curNext;
            }
            // 调整 prev == NULL 代表是头出现重复结点 所以要单独处理
            if (prev != NULL) {
                prev->next = next;
            } else {
                pHead = cur;
            }

            // 如果 next 已经提前到尾 则不需要调整
            if (next != NULL)
                next = cur->next;
        }
    }

    return pHead;
}

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

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

相关文章

第二章React全家桶之面向组件编程

文章目录 一、组件的基本理解和使用1-1、函数式组件1-2、类式组件 二、组件实例的三大核心属性2-1、state的基本使用2-2-1、state的总结 2-2、props的基本使用2-2-1、props的传值与批量传值2-2-2、对props进行限制2-2-3、props的简写2-2-4、类式组件中的构造器与props2-2-5、函…

使用 eKuiper 按需桥接 CAN Bus 数据至 MQTT

CAN Bus 是一种广泛应用于汽车和工业领域的通信协议,它能够让多个设备在同一网络中进行交互。而 MQTT 是一种广泛应用于物联网领域的通信协议,作为一种轻量级的发布-订阅消息传输协议,它有效地促进了机器之间的通信。 通过将 CAN Bus 数据桥…

Vue组件库Element-常见组件-分页

常见组件-Pagination 分页 Pagination 分页&#xff1a;当数据过多时&#xff0c;会使用分页分解数据 具体关键代码如下&#xff1a;&#xff08;重视注释&#xff09; <template><div><!-- Pagination 分页 --><el-pagination background layout"…

Etsy店铺被封的原因是什么?如何防封

ETSY是一个全球知名的在线市场和电商平台&#xff0c;专注于手工艺品、独特商品和创意艺术。它为卖家提供了一个平台来展示和销售自己的手工制品、艺术品、珠宝、家居用品、时尚配饰等各种创意产品。作为一个颇受中国商家青睐的平台&#xff0c;Etsy在账号检测方面也是不亚于亚…

微软MFC技术中消息的分类

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来聊聊MFC技术中消息的分类。 微软Windows中的消息虽然很多&#xff0c;但是种类并不繁杂&#xff0c;大体上有3种&#xff1a;窗口消息、命令消息和控件通知消息。 窗口消息 窗口消息是系统中最为常见…

网络安全(黑客)自学路线

一.零基础学习 在网络安全的学习过程中&#xff0c;基础知识是一个绕不过的问题&#xff0c;Web知识本身就非常丰富&#xff0c;覆盖范围也非常广泛。 首先是大家比较熟悉的浏览器、数据库、服务器&#xff1b; 以及由简到难的HTML、JavaScript和CSS、PHP、Java、.net&#…

【Flutter】使用 Drift 实现 Flutter 数据持久化

文章目录 一、前言二、版本信息三、Drift 简介四、如何安装和设置 Drift五、基础使用1. 创建数据库和表2. 插入、查询、更新和删除数据3. 使用事务 六、总结 一、前言 你是否渴望成为 Flutter 的专家&#xff0c;掌握更多的技巧和最佳实践&#xff1f;我们有个好消息要告诉你&…

【vue3】学习笔记--组件通信方式

学习vue3总是绕不开vue2 vue2组件通信方式总结&#xff1a; 1、props&#xff1a;可以实现父子组件&#xff0c;子父组件&#xff0c;甚至兄弟组件通信 2、自定义事件&#xff1a;实现子父组件通信 3、全局事件总线$bus:可以实现任意组件通信 4、pubsub&#xff1a;发布订阅模…

目标检测常用的评价指标

目标检测常用的评价指标 1 IoU&#xff08;Intersection over Union&#xff09;2 GIoU&#xff08;Generalized IoU&#xff09;3 DIoU&#xff08;Distance-IoU&#xff09;4 CIoU&#xff08;Complete-IoU&#xff09;5 EIoU&#xff08;Efficient-IoU&#xff09;6 SIoU7 W…

爬虫入门07——requests中携带cookie信息

爬虫入门07——requests中携带cookie信息 对于需要登陆的网站如果不携带cookie是无法获取我们所需内容的就以查看我在CSDN中的订单为例&#xff0c;在登陆后可以查看到订单信息 而当我们使用Python代码发出请求时&#xff0c;是不携带cookie&#xff0c;因此无法拿到订单相关信…

Flink的状态是否支持任务间共享

背景&#xff1a; 在日常编写代码的过程中&#xff0c;我们经常会在方法内部new很多的其他类对象来进行编码工作&#xff0c;那么对于这种情况怎么让new出来的对象是一个我们特意创建出来的一个mock实例&#xff0c;从而让我们能完全控制new出来的对象的所有行为呢&#xff1f…

【雕爷学编程】Arduino动手做(154)---AFMotor电机扩展板模块3

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

数模混合项目:模拟跨数字走线注意事项

数模混合项目中&#xff0c;模拟在数字上走线是常有的事&#xff0c;这里需要注意几个点: 1.模拟电源在数字上走线影响不大&#xff0c;但尽量走top metal和AP层。 2.模拟高频线&#xff0c;尤其是时钟&#xff0c;尽量不要在数字上走线&#xff0c;非要走&#xff0c;最好下…

数据总线学习

为啥要数据总线 使用服务化方式发布&#xff0c;业务端和中间件完全解耦合。一处生产&#xff0c;处处消费设计理念。提供用户可定制的托管化通用消费方案&#xff08;如同步mysql到缓存&#xff0c;同步mysql到es&#xff0c;消费mysql到大数据等托管服务&#xff09; 特性 …

python configparser模块常用方法以及常见报错处理

configparser 是 Python 中一个用于处理配置文件的标准库&#xff0c;可以帮助你生成、读取和修改配置文件的内容 1. 生成配置文件 import configparser# 创建一个配置文件对象 config configparser.ConfigParser()# 添加配置项和值 config[Section1] {key1: value1, key2: …

java 科学计算库 Smile

官网 https://haifengl.github.io/ github https://haifengl.github.io/ 简介 统计机器智能和学习引擎&#xff0c;或者简称 Smile&#xff0c;是一个有前途的现代机器学习系统&#xff0c;在某些方面类似于 Python 的 scikit-learn。它是用 Java 开发的&#xff0c;也提供…

私域账号防范手册

微信为什么要养号吗&#xff1f;为什么会被封&#xff1f;是什么原理&#xff0c;怎么解封&#xff0c;这些你的了解吗&#xff1f; 来看看这篇文章&#xff0c;这些都能给你解答。

向日葵远程命令执行漏洞(CNVD-2022-10270) 漏洞复现

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 影响范围03 利用方式05 实战案例06 修复方案 01 漏洞描述 向日葵远程控制是一款面向企业和专业人员的远程pc管理和控制的服务软件。可以在任何有网络的情况下&#xff0c;轻松访问并控制…

Linux命令之nc命令

一、命令简介 nc是netcat的简写&#xff0c;是一个功能强大的网络工具&#xff0c;有着网络界的瑞士军刀美誉。nc命令在linux系统中实际命令是ncat&#xff0c;nc是软连接到ncat。nc命令的主要作用如下&#xff1a; 实现任意TCP/UDP端口的侦听&#xff0c;nc可以作为server以T…

vue3中的包装响应式数据ref、reactive、toRef、toRefs

一、ref Vue 3中拥有一个新的特性叫做ref&#xff0c;它是一个函数&#xff0c;用于包装响应式数据。与Vue 2的data选项不同&#xff0c;ref可以在普通JavaScript中使用&#xff0c;而不仅仅是在Vue组件中。ref可以将普通的JavaScript数据变成响应式的&#xff0c;这意味着当被…