C++基础(⑤删除链表中的重复节点(链表 + 遍历))

题目描述
给定一个排序好的链表(升序),删除所有重复的元素,使每个元素只出现一次。
示例:
输入:1 → 1 → 2 → 3 → 3
输出:1 → 2 → 3
解题思路
核心观察:链表已排序,重复节点一定「相邻」(无需考虑非相邻重复)。
遍历逻辑:用一个指针 current 从表头开始遍历:
若 current 的值 == current->next 的值(发现重复),则跳过 current->next(让 current->next 指向 current->next->next);
若不重复,current 移动到下一个节点(current = current->next)。
边界处理:链表为空或只有 1 个节点时,直接返回原链表(无重复可删)。


C++ 代码实现

#include <iostream>
using namespace std;// 先定义链表节点(复用你熟悉的结构)
struct ListNode {int val;ListNode* next;ListNode(int v = 0, ListNode* n = nullptr) : val(v), next(n) {}
};// 打印链表(辅助函数)
void printList(ListNode* head) {ListNode* curr = head;while (curr != nullptr) {cout << curr->val << " → ";curr = curr->next;}cout << "nullptr" << endl;
}// 核心函数:删除重复节点
ListNode* deleteDuplicates(ListNode* head) {// 边界:空链表或只有1个节点,直接返回if (head == nullptr || head->next == nullptr) {return head;}ListNode* current = head;  // 遍历指针while (current != nullptr && current->next != nullptr) {if (current->val == current->next->val) {// 发现重复:跳过 current->next(先存临时指针避免内存泄漏)ListNode* temp = current->next;current->next = current->next->next;delete temp;  // 释放重复节点的内存} else {// 不重复:移动到下一个节点current = current->next;}}return head;
}// 测试代码
int main() {// 构造示例链表:1 → 1 → 2 → 3 → 3ListNode* head = new ListNode(1);head->next = new ListNode(1);head->next->next = new ListNode(2);head->next->next->next = new ListNode(3);head->next->next->next->next = new ListNode(3);cout << "原链表:";printList(head);head = deleteDuplicates(head);cout << "删除重复后:";printList(head);// 释放链表内存(避免泄漏)ListNode* curr = head;while (curr != nullptr) {ListNode* temp = curr;curr = curr->next;delete temp;}return 0;
}

123

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

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

相关文章

摩搭api 实现

AI图片生成器前端实现详解本文详细解析一个功能完整的AI图片生成器前端实现&#xff0c;包含主题切换、参数配置、图片生成与预览等核心功能。项目概述 这是一个基于ModelScope平台的AI图片生成器前端实现&#xff0c;用户可以通过输入提示词、选择模型和调整参数来生成高质量图…

c++--线程休眠/sleep

线程休眠<unistd.h>--sleep()<thread>--std::this_thread::sleep_for()ros--rclcpp::sleep_for()以上的三个sleep也就是休眠会占用CPU吗简单直接的回答是&#xff1a;不会。一个正确使用、正在休眠的线程不会占用CPU资源。核心原理当你调用像 std::this_thread::sl…

人工智能基础概念

The brain happens to be a meat machine. —— Marvin Lee Minsky 目录 人类智能 人工智能 三个阶段 三大学派 四个要素 关系辨析 维度分类 发展简史 技术方向 应用领域 产业图谱 发展趋势 人类智能 人工智能的目的是通过探索智慧的实质&#xff0c;扩展人类智能…

企业数字资产管理怎么转型更高效?一文打通策略与实践

核心要点 问题&#xff1a; 传统的内容管理方式效率低、协作难、版本混乱&#xff0c;企业转型 DAM 系统面临选型难和落地难两大挑战。 答案&#xff1a; 采用阶段性转型策略&#xff0c;结合智能化工具和标准化流程&#xff0c;能帮助企业构建可扩展、易协作、强治理的内容资…

python pyqt5开发DoIP上位机【源码】

目录 文章合集 文章合集 python pyqt5开发DoIP上位机【介绍】 python pyqt5开发DoIP上位机【代码里发送常用uds命令是怎么实现的?】 python pyqt5开发DoIP上位机【代码里是怎么获取诊断回复的?】 python pyqt5开发DoIP上位机【诊断回复的函数都是怎么调用的?】 python …

IIC (I2C)通信

一、IIC的特点I2C&#xff08;Inter IC Bus&#xff09;又成为&#xff08;爱方C I2C&#xff09;是由Philips公司开发的一种通用数据总线两根通信线&#xff1a;SCL&#xff08;Serial Clock&#xff09;、SDA&#xff08;Serial Data&#xff09;同步&#xff0c;半双工带数据…

【图像处理 - 基础知识】ISP(Image Signal Processor)处理

文章目录1. 图像传感背景2. 图像数据格式2.1. 【RAW】Bayer滤色阵列&#xff08;Bayer Filter Array&#xff09;2.2. 【RGB】2.3. 【YUV】3. ISP&#xff08;Image Signal Processor&#xff09;3.1. ISP定义3.2. 分类概括1 RAW 域&#xff08;Raw Domain&#xff09;2 RGB 域…

PostgreSQL 数据库灾备要点与举例说明**

PostgreSQL 数据库灾备要点与举例说明 数据库灾备(Disaster Recovery, DR)是确保业务连续性的核心环节,其目标是在主生产环境遭遇计划外中断(如硬件故障、自然灾害、人为错误、数据损坏)时,能快速恢复数据和服务。PostgreSQL 因其强大和开源特性,提供了多种高效的灾备方…

【GaussDB】在逻辑复制中剔除指定用户的事务

【GaussDB】在逻辑复制中剔除指定用户的事务 1. 需求背景 在逻辑复制中&#xff0c;期望对源端指定用户的所有操作不复制到目标端。然而WAL日志中没有用户信息可用于过滤&#xff0c;因此考虑结合审计日志来实现这一需求。 2. 解决方案 2.1 配置审计日志 首先需要开启事务…

C/C++---预定义常量

在C/C开发中&#xff0c;预定义常量是编译器与标准库提供的“隐形工具集”&#xff0c;无需开发者显式定义&#xff0c;却在跨平台兼容、调试定位、数值计算安全等场景中发挥核心作用。这些常量涵盖编译环境标识、语言标准判断、代码定位信息、数值边界限制等多个维度&#xff…

嵌入式学习笔记--LINUX系统编程--DAY03进程控制

1.进程概述进程和程序的区别程序&#xff1a;程序是存储在存储介质上的一个可执行文件---静态的进程&#xff1a;进程是程序的执行实例。可以说进程就是正在执行的程序。程序是一些指令的集合&#xff0c;而进程是程序的执行过程&#xff0c;这个过程的状态是变化的&#xff0c…

【90页PPT】新能源汽车数字化转型SAP解决方案(附下载方式)

篇幅所限&#xff0c;本文只提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/2501_92808859/91777751 资料解读&#xff1a;《新能源汽车数字化转型SAP解决方案》 ​​详细资料请看本解读文章的最后内容​​ 在全球汽车产业加速向电…

LSM6DS3姿态芯片和LIS2MD磁力计芯片数据读取(stm32)

上代码main.c 代码示例#include "lsm6ds3.h" #include "lis2md.h"int16_t Acc[3] {0}, GYO[3] {0},Mag[3] {0};int main(void) {I2C_GPIO_Config(); //配置IIC使用端口Delayms(500); //延时Lsm6ds3_Init( ); …

数据传输安全-IKE工作过程

在前面的课程中&#xff0c;你已经掌握了&#xff1a;IPSec的目标&#xff1a;提供机密性、完整性、身份认证、防重放。IPSec的执行者&#xff1a;AH和ESP协议。IPSec的规则手册&#xff1a;SA&#xff08;安全关联&#xff09;&#xff0c;包含了所有保护参数&#xff08;算法…

翻译-同位协同克里金算法

同点协同克里金法 副标题: 地统计学课程 主要内容: 同点协同克里金法 摘要 同点协同克里金法是一种多元地统计学技术,用于借助次要变量(协变量)来估算主要变量。本课程介绍了同点协同克里金法,并将其与简单克里金法和简单协同克里金法进行了比较。通过一个假设的案例…

国家统计局数据分析01——机器学习

我们前面爬取过国家统计局数据爬取——机器学习-CSDN博客的数据,我们接下来就对爬取的数据进行分析。 这是一个完整的数据分析代码,主要用于加载、清洗和探索政府统计数据。让我为你详细解释每个部分: 1. 导入必要的库 import pandas as pd # 数据处理和分析的核心库 imp…

【杂谈】-混沌理论能否赋予机器差异化思考能力?

混沌理论能否赋予机器差异化思考能力&#xff1f; 文章目录混沌理论能否赋予机器差异化思考能力&#xff1f;1、AI与结构化思维的本质特征2、人类思维的独特优势3、混沌算法的创新实践4、混沌算法的作用机理5、混沌算法的应用实例5.1 音乐创作革新5.2 图像生成突破5.3 科学发现…

jQuery.print插件:网页内容打印与导出指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;在网页开发中&#xff0c;为了实现内容的打印或导出&#xff0c;可以利用jQuery.print插件&#xff0c;该插件提供了一个简易的解决方案&#xff0c;尤其适用于表格数据。本指南详细介绍了如何使用jQuery.print…

w嵌入式分享合集125

自己的原文哦~ https://blog.51cto.com/whaosoft/14165530 一、常用电路基础公式 1.欧姆定律计算 计算电阻电路中电流、电压、电阻和功率之间的关系。 欧姆定律解释了电压、电流和电阻之间的关系&#xff0c;即通过导体两点间的电流与这两点间的电势差成正比。说…

Docker 核心技术:Union File System

大家好&#xff0c;我是费益洲。UnionFS 作为 Docker 的技术核心之一&#xff0c;实现了 Docker 镜像的分层轻量化构建、容器资源的隔离复用等目的。本文将从核心原理、主流技术实现简单介绍 UnionFS。 核心原理 Linux 的联合文件系统&#xff08;Union File System&#xff0c…