当前位置: 首页 > news >正文

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.dtcms.com/a/356329.html

相关文章:

  • 储能变流器之LLC
  • MySQL数据库精研之旅第十四期:索引的 “潜规则”(上)
  • Unity、Unreal Engine与Godot中纹理元数据管理的比较分析
  • 嵌入式Linux LED驱动开发
  • Ubuntu22.04系统安装Opencv,无法定位包libjasper-dev libdc1394-22-dev的解决办法
  • 【C++】C++入门——(上)
  • GTSAM中gtsam::LinearContainerFactor因子详解
  • 【C++八股文】计算机网络篇
  • 【YOLO学习笔记】数据增强mosaic、Mixup、透视放射变换
  • flutter-使用url_launcher打开链接/应用/短信/邮件和评分跳转等
  • leetcode 338 比特位计数
  • rockchip温控及cpu降频配置
  • 事务和锁(进阶)
  • 使用 Docker 部署 Squid 为 Kubernetes 中的 Nexus3 提供公网代理访问
  • Windows12概念曝光,巧用远程控制工具抢先体验
  • 人脸识别“不备案“有哪些后果?
  • 公司内网部署离线deepseek+docker+ragflow本地模型实战
  • Day15 Logurs框架学习
  • Elasticsearch核心配置与性能优化
  • Linux 线程调度核心要点
  • 期权合约作废了怎么处理?
  • AI共链·智存未来 | 绿算技术受邀出席华为AI SSD发布会
  • 若依微服务一键部署(RuoYi-Cloud):Nacos/Redis/MySQL + Gateway + Robot 接入(踩坑与修复全记录)
  • 吱吱企业通讯软件可私有化部署,构建安全可控的通讯办公平台
  • C++异常处理指南:构建健壮程序的错误处理机制
  • 2025年渗透测试面试题总结-39(题目+回答)
  • FDTD_mie散射_仿真学习(2)
  • AWS集成开发最佳实践:构建高效可靠的云管理平台
  • 海运业务怎么管?解析海运货代系统的核心功能模块
  • Blender建模软件基本操作--学习笔记1