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

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

题目: 

给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。

示例 1:

输入:head = [1,1,2]
输出:[1,2]

示例 2:

输入:head = [1,1,2,3,3]
输出:[1,2,3]

思路: 

  1. 初始化两个指针

    • slow 指向当前不重复链表的末尾(初始为 head)。

    • fast 用于遍历链表(初始为 head->next)。

  2. 遍历链表

    • 如果 fast->val != slow->val,说明 fast 是一个新值,应该保留:

      • 更新 slow->next = fast(连接不重复的节点)。

      • 移动 slow = slow->next(更新不重复链表的末尾)。

    • 不管是否相等,fast 都继续向后移动。

代码:

struct ListNode* deleteDuplicates(struct ListNode* head) 
{
    if (head == NULL)
    {
        return NULL;
    }
    
    struct ListNode* slow = head;
    struct ListNode* fast = head->next;
    
    while (fast != NULL)
    {
        if (fast->val != slow->val)
        {
            slow->next = fast; // 连接不重复的节点
            slow = slow->next; // 移动 slow
        }
        fast = fast->next; // 继续遍历
    }
    
    slow->next = NULL; // 截断尾部存在的重复节点
    return head;
}
http://www.dtcms.com/a/92096.html

相关文章:

  • CF254B Jury Size
  • 抽象的算法0.1.3.2版本
  • Flutter 完整开发指南
  • 【Qt】C++前向声明与Qt信号与槽的区别
  • 备赛蓝桥杯之第十六届模拟赛2期职业院校组第六题:菜谱教程
  • 【Python】天气数据可视化
  • 啸叫抑制(AFS)从算法仿真到工程源码实现-第八节-系统搭建
  • NVMe协议
  • Vue中动态搜索表单的「默认值」设计:从原理到最佳实践!!!
  • npm前端模块化编程
  • 【QT】QT中的中文显示乱码解决
  • TypeScript中的声明合并:与JavaScript的对比与实践指南
  • 基于 ffmpeg 实现合并视频
  • LlamaFactory部署及模型微调【win10环境】
  • 论坛系统自动化测试项目报告
  • 【JavaEE】Mybatis 传参与排序模糊查询
  • FDCAN应用说明
  • RAPTOR:如何用树状结构重塑RAG检索能力?
  • LangChain开发(八)自定义工具调用
  • RocketMQ可视化工具使用 - Dashboard(保姆级教程)
  • Pydantic递归模型深度校验36计:从无限嵌套到亿级数据的优化法则
  • hugo+github pages 部署实验室网站
  • 量子计算:开启未来计算的新纪元
  • 【初探数据结构】归并排序与计数排序的序曲
  • 从0开始配置 React 开发环境
  • C语言自定义数据类型详解——枚举类型
  • SFT实验报告
  • 【Git 常用指令速查表】
  • Spring Boot响应压缩配置与优化
  • React组件简介