LeetCode热题(JS版) - 83. 删除排序链表中的重复元素

31 阅读1分钟

问题描述

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

示例

输入: 1->1->2
输出: 1->2

解法

该问题可以使用双指针来解决。具体步骤如下:

  • 首先,初始化两个指针 currnext,分别指向链表头部。
  • 然后,遍历链表。如果当前节点的值等于下一个节点的值,则将当前节点的下一个节点指向下下个节点,这样就相当于删除了当前节点的重复节点。
  • 最后,当遍历完成后,返回链表的头部即可。

代码实现

以下是使用 Typescript 实现的代码:

function deleteDuplicates(head: ListNode | null): ListNode | null {
  let curr = head;

  while (curr !== null && curr.next !== null) {
    const next = curr.next;
    if (curr.val === next.val) {
      curr.next = next.next;
    } else {
      curr = next;
    }
  }

  return head;
}

image.png

时间复杂度分析

由于需要遍历整个链表,因此时间复杂度为 O(n)O(n),其中 nn 是链表的长度。在遍历过程中,我们只需要维护两个指针,因此空间复杂度为 O(1)O(1)

因此,算法的时间复杂度为 O(n)O(n),空间复杂度为 O(1)O(1)