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

83.删除排序链表中的重复元素

在这里插入图片描述

解题思路:双指针法

由于链表是 有序的,所以所有重复的元素必定是连续的
我们可以使用双指针遍历链表,实现原地去重。

关键点:

  • 使用两个指针 slowfast

    • slow 指向不重复部分的尾部;
    • fast 用来遍历查找下一个不重复元素;
  • 每当 fast->val != slow->val 时,说明发现了新值:

    • slow->next = fast
    • 然后 slow 往前移动一步;
  • 最后确保链表的末尾指向 nullptr,避免保留多余的重复节点。


代码实现(C++)

class Solution {
public:ListNode* deleteDuplicates(ListNode* head) {if(head == nullptr)return nullptr;ListNode* slow = head; ListNode* fast = head;while(fast != nullptr){if(fast->val != slow->val){slow->next = fast;slow = slow->next;}fast = fast->next;}// 断开重复部分slow->next = nullptr;       return head;}
};

🧪 示例演示

输入链表:

1 -> 1 -> 2 -> 3 -> 3

执行过程:

  • slow 指向第一个 1
  • fast 向前走,跳过重复的 1
  • fast 发现 2,赋值给 slow->next,然后 slow 也往前走;
  • fast 跳过重复的 3,最终 slow 的 next 设为 nullptr

输出链表:

1 -> 2 -> 3

时间与空间复杂度分析

  • 时间复杂度O(n),每个节点只遍历一次;
  • 空间复杂度O(1),使用常数空间,原地修改链表。

http://www.lryc.cn/news/601895.html

相关文章:

  • DeepCompare文件深度对比软件“.dpcp“工程项目文件功能深度解析
  • vector使用和模拟
  • 网络虚拟化:veth,bridge,network namespace与docker网络
  • ESP32学习-FreeRTOS队列使用指南与实战
  • 使用低级上位画图法理解在对磁盘空间进行容量分配时【低级单位上位至高级单位的换算】
  • Mybatis Plus 多数据源
  • AI时代,我们更需要自己的开发方式与平台
  • Coze Studio概览(一)
  • 链表算法常用技巧与操作
  • 通过硬编码函数地址并转换为函数指针来调用函数
  • 【Agentic】通过LangGrah实现RAG评分和重写
  • 清华大学具身智能多传感器融合感知综述:背景、方法、挑战与展望
  • Flutter开发实战之CI/CD与发布流程
  • 网易大模型算法岗面经80道
  • JSON格式化与结构对比
  • 移植pbrt中的并行化到ray trace in weeks中
  • LangGraph底层API入门总结
  • OpenLayers 综合案例-地图绘制
  • 十字链表以及实现
  • SpringAI入门及浅实践,实战 Spring‎ AI 调用大模型、提示词工程、对话记忆、Adv‎isor 的使用
  • 第五章 中央处理器(CPU)知识体系与考法总结
  • 【第六节】方法与事件处理器
  • Gradle#Plugin
  • Windows---动态链接库Dynamic Link Library(.dll)
  • 2025.7.27总结—新励成
  • Kubernetes 核心组件解析
  • HCIE学习之路:MSTP实现负载均衡实验
  • 【INT范围提取字符串数字为正数】2022-8-29
  • Leetcode 3628. Maximum Number of Subsequences After One Inserting
  • rust- 定义模块以控制作用域和隐私