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

题目:

给定一个已排序的链表的头 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
};
相关推荐
爱理财的程序媛1 天前
openclaw 盯盘实践
算法
MobotStone1 天前
Google发布Nano Banana 2:更快更便宜,图片生成能力全面升级
算法
颜酱1 天前
队列练习系列:从基础到进阶的完整实现
javascript·后端·算法
用户5757303346241 天前
两数之和:从 JSON 对象到 Map,大厂面试官到底在考察什么?
算法
程序猿追1 天前
“马”上行动:手把手教你基于灵珠平台打造春节“全能数字管家”
算法
ZPC82102 天前
docker 镜像备份
人工智能·算法·fpga开发·机器人
ZPC82102 天前
docker 使用GUI ROS2
人工智能·算法·fpga开发·机器人
琢磨先生David2 天前
Day1:基础入门·两数之和(LeetCode 1)
数据结构·算法·leetcode
颜酱2 天前
栈的经典应用:从基础到进阶,解决LeetCode高频栈类问题
javascript·后端·算法