【JS每日一算法】🟩77. 删除排序链表中的重复元素(一次遍历)

473 阅读1分钟

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

提示:

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

示例:

list1.jpg

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

题解:

更多JS版本题解点击链接关注该仓库👀

/**
 * @description: 迭代法   TC:O(n)  SC:O(1)
 * @author: JunLiangWang
 * @param {*} head 给定链表头节点
 * @return {*}
 */
function iterate(head) {
    /**
     * 由于给定的链表是排好序的,因此重复的元素在链表中出现
     * 的位置是连续的,因此我们只需要对链表进行一次遍历,就
     * 可以删除重复的元素。
     */

    // 如果链表为空直接返回
    if (!head) return head

    // 记录头节点,方便后续返回
    const HEAD = head

    // 如果当前节点不存在下一个节点,
    // 证明以遍历完成所有节点
    while (head.next) {
        // 如果当前节点的值等于下一个节点的值
        if (head.val == head.next.val)
            // 则删除下一个节点,具体为将当前节点
            // 的下一个节点赋值为下一个节点的下一个节点
            head.next = head.next.next
        // 不等于,则将当前节点后移一位
        else
            head = head.next
    }
    return HEAD;
}