TypeScript刷LeetCode[12] 83. 删除排序链表中的重复元素

3/26/2021 TypeScriptLeetCode算法链表

# 题目

难度:简单

存在一个按升序排列的链表,给你这个链表的头节点head,请你删除所有重复的元素,使每个元素 只出现一次 。

返回同样按升序排列的结果链表。

示例 1:

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

示例 2:

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

提示:

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

# 代码

简单粗暴,一次遍历

因为要删除链表元素,所以一直判断当前节点的next

如果next和当前节点相同,删掉next,否则往下遍历

这里要注意,判断的时候需要判断p是否为空,可以用p?.next语法(然而 LeetCode 的代码编辑器给我标波浪)

function deleteDuplicates(head: ListNode | null): ListNode | null {
    if (!head) {
        return head
    }
    let p = head

    while (p && p.next) {
        if (p.val === p.next.val) {
            p.next = p.next.next
        } else {
            p = p.next
        }
    }

    return head
}

点击刷本题吊打我 (opens new window)