当前位置: 首页 > 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.xdnf.cn/news/1390267.html

相关文章:

  • 【C++闯关笔记】STL:vector的学习与使用
  • Spring Security 传统 web 开发场景下开启 CSRF 防御原理与源码解析
  • CorrectNav:用错误数据反哺训练的视觉语言导航新突破
  • Apache服务器IP 自动跳转域名教程​
  • electron-vite 配合python
  • UPDF for mac PDF编辑器
  • JAVA:Spring Boot 集成 Easy Rules 实现规则引擎
  • 来自火山引擎的 MCP 安全授权新范式
  • 嵌入式Linux驱动开发:i.MX6ULL按键中断驱动(非阻塞IO)
  • PostgreSQL15——子查询
  • 基于SQL大型数据库的智能问答系统优化
  • Emacs 多个方便查看函数列表的功能
  • QML QQuickImage: Cannot open: qrc:/images/shrink.png(已解决)
  • 前端-初识Vue实例
  • Spring Boot Redis序列化全解析(7种策略)
  • 2024年06月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • leetcode 461 汉明距离
  • 如何在FastAPI中玩转全链路追踪,让分布式系统故障无处遁形?
  • 基于MCP工具的开发-部署-上线与维护全流程技术实现与应用研究
  • 北斗导航 | PPP-RTK算法核心原理与实现机制深度解析
  • AI助力PPT创作:秒出PPT与豆包AI谁更高效?
  • TypeScript:map和set函数
  • 【前端教程】从基础到专业:诗哩诗哩网HTML视频页面重构解析
  • Java试题-选择题(21)
  • new/delete 和 malloc/free 区别
  • 小杰机器视觉(five day)——直方图均衡化
  • linux系统学习(13.系统管理)
  • 基于orin系列的刷写支持笔记
  • 30分钟入门实战速成Cursor IDE(1)
  • 【拍摄学习记录】04-拍摄模式/曝光组合