力扣刷题:删除排序链表的重复元素Ⅱ

题目:

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

示例 1:

输入:head = [1,2,3,3,4,4,5]

输出:[1,2,5]

示例2:

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

输出:[2,3]

解析:

方法:双指针 + 虚拟头节点

  1. 使用虚拟头节点简化边界情况处理(特别是头节点可能被删除的情况)

  2. 用两个指针:

  • r:指向已确认不重复的最后一个节点

  • q:探索当前节点后面是否有重复值

  1. 通过判断 q 是否移动来确定当前节点是否重复

具体代码:

javascript 复制代码
/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var deleteDuplicates = function(head) {
    //设置虚拟头结点
    let pre = new ListNode(0,head);
    //设置指针指向虚拟头结点
    let r = pre;
    while(r.next){
        let q = r.next
        while(q.next && q.val === q.next.val){
            q = q.next
        }
        if(q === r.next) {
            r = r.next
        }else {
            r.next = q.next
        }
    }
    return pre.next
};
相关推荐
2301_8002561123 分钟前
第九章:空间网络模型(空间网络查询、数据模型、Connected、with Recursive、pgRouting)
网络·数据库·算法·postgresql·oracle
逑之1 小时前
C语言笔记10:sizeof和strlen,指针与数组
c语言·笔记·算法
求梦8201 小时前
【力扣hot100题】旋转图像(15)
算法·leetcode·职场和发展
C雨后彩虹6 小时前
任务最优调度
java·数据结构·算法·华为·面试
少林码僧8 小时前
2.31 机器学习神器项目实战:如何在真实项目中应用XGBoost等算法
人工智能·python·算法·机器学习·ai·数据挖掘
钱彬 (Qian Bin)8 小时前
项目实践15—全球证件智能识别系统(切换为Qwen3-VL-8B-Instruct图文多模态大模型)
人工智能·算法·机器学习·多模态·全球证件识别
Niuguangshuo8 小时前
EM算法详解:解密“鸡生蛋“的机器学习困局
算法·机器学习·概率论
a3158238068 小时前
Android 大图显示策略优化显示(一)
android·算法·图片加载·大图片
一条大祥脚9 小时前
26.1.9 轮廓线dp 状压最短路 构造
数据结构·c++·算法
鲨莎分不晴9 小时前
反向传播的数学本质:链式法则与动态规划的完美共舞
算法·动态规划