创见博客
删除排序链表中的重复元素
七崽爱吃小饼干2026/01/07阅读 0专栏 算法合集

删除排序链表中的重复元素

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

示例 1:

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

示例 2:

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

提示:

  • 链表中节点数目在范围 [0, 300] 内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序 排列

解法:

ts
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     val: number
 *     next: ListNode | null
 *     constructor(val?: number, next?: ListNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *     }
 * }
 */

function deleteDuplicates(head: ListNode | null): ListNode | null {
    // 重复的数字都需要删除,检测到有两个值相同,就开始循环,把值相同的节点都删除即可
    const Nummy = new ListNode() // 头节点
    Nummy.next = head
    let p = Nummy
    while(p.next !== null){
        if(p.next?.next && p.next.val === p.next.next.val){ // 发现重复数字
            let delVal = p.next.val
            while(p.next && p.next.val === delVal){ // 删除同值元素
                p.next = p.next.next
            }
        }else{
            p = p.next // 后移
        }
    }
    return Nummy.next
};
评论
0/100