力扣刷题:删除排序链表的重复元素Ⅱ
2026/8/12 10:28:29 网站建设 项目流程

题目:
给定一个已排序的链表的头 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 是否移动来确定当前节点是否重复

具体代码:

/** * 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} */vardeleteDuplicates=function(head){//设置虚拟头结点letpre=newListNode(0,head);//设置指针指向虚拟头结点letr=pre;while(r.next){letq=r.nextwhile(q.next&&q.val===q.next.val){q=q.next}if(q===r.next){r=r.next}else{r.next=q.next}}returnpre.next};

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询