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

题目:

给定一个已排序的链表的头 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
};
相关推荐
罗西的思考13 小时前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
美团技术团队16 小时前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
To_OC1 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC1 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK1 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
_清歌2 天前
DSpark 深度解读:DeepSeek-V4 如何用「半自回归」把推理速度提升 85%
算法
统计实现局2 天前
SVD 的三步走:双对角化、Givens 收敛、排序
算法
躬行见万象2 天前
《VLA 系列》UniLab 强化训练 | G1 机器人 |复现
算法
统计实现局2 天前
对称不定分解(Bunch-Kaufman):为什么 Cholesky 不够用
算法