[路飞]_一起刷leetcode 83. 删除排序链表中的重复元素

「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战

题目:

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

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

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

 

示例 1:

输入: head = [1,1,2]
输出: [1,2]
复制代码

示例 2:

输入: head = [1,1,2,3,3]
输出: [1,2,3]
复制代码

 

提示:

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

思路:

  1. 因为链表已经是经过升序排列的,所以我们只需要比较当前元素和下一个元素的值的大小;
  2. 如果当前元素的值等于下一个元素的值,那么删除下一个元素, 在链表中的操作就直接将当前节点的下一个节点, 执行下下个节点;
  3. 如果值不相等,则将当前指针换后移一个元素,判断下一个元素是否重合,直到结束;
  4. 为了返回链表的头指针,一开始我们要找个人带跑,保留头指针所在的位置。

实现:

/**
 * 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 cur = head;

    // 结束条件, 没有下一个节点就不用比较了
    while (cur && cur.next) {
        // 如果值相同,删除下个节点
        if (cur.val === cur.next.val) {
            // 这一步相当于删除下一个节点
            cur.next = cur.next.next;
        } else {
            // 比对下一个元素和下下个元素
            cur = cur.next;
        }
    }

    return head;
};
复制代码

看懂了的小伙伴可以点个关注、咱们下道题目见。如无意外以后文章都会以这种形式,有好的建议欢迎评论区留言。

Guess you like

Origin juejin.im/post/7034150031456534542