[LeetCode-0083题-删除排序链表中的重复元素] | 刷题打卡

266 阅读1分钟

掘金团队号上线,助你 Offer 临门! 点击 查看详情

一、题目描述

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

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

image.png

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

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

二、思路分析

1. 重复元素一定相邻
2. 遍历链表,判断当前元素和下个元素是是否相同,相同则删除下个元素
    

三、解题代码

/**
 * 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}
 */
var deleteDuplicates = function(head) {
    let p1 = head
    while (p1 && p1.next) {
        if (p1.val === p1.next.val) {
            p1.next = p1.next.next
        } else {
            p1 = p1.next  // 不想等的时候才移动指针
        }
    }
    return head
};
 

时间复杂度:O(n) 空间复杂度:O(1)

四、总结

  • 升序排列的链表,重复元素一定是相邻的。
  • 每天一练,持续学习