美文网首页
LeetCode 删除排序链表中的重复元素

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

作者: 吴敬悦 | 来源:发表于2021-03-26 23:48 被阅读0次

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

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

    示例 1:

    示例1图示
    输入:head = [1,1,2]
    输出:[1,2]
    

    示例 2:

    示例2的图示
    输入:head = [1,1,2,3,3]
    输出:[1,2,3]
    

    提示:

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

    我的算法实现为:

    /**
     * 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) {
        if (!head) {
            return null
        }
        let val = head.val;
        let p = head;
        let q = head.next;
        while(q !== null) {
            if (q.val === val) {
                // 说明这个节点需要删除
                // 此时对于 p 来说位置不动
                p.next = q = q.next
            } else {
                // 如果不相等,那么首先需要更新 val 
                // p,q 都需要向前移动
                val = q.val
                p = q;
                q = q.next;
            }
        }
        return head
    };
    

    相关文章

      网友评论

          本文标题:LeetCode 删除排序链表中的重复元素

          本文链接:https://www.haomeiwen.com/subject/achehltx.html