当前位置: 首页 > 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;
}

相关文章:

  • 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(保姆级教程)
  • 媒体:“西北大学副校长范代娣成陕西首富”系乌龙,但她的人生如同开挂
  • 足球少年郎7月试锋芒,明日之星冠军杯构建顶级青少年赛事
  • 马上评丨岂能为流量拿自己的生命开玩笑
  • 这个“超强致癌细菌”,宝宝感染率高达40%,预防却很简单
  • 广州地铁十一号线赤沙车辆段工程高坠事故调查报告公布:1人重伤且漏报
  • 中美大幅下调超100%关税,印巴四日“战争”复盘|907编辑部