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

68 阅读1分钟

题目

给定一个已排序的链表的头 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. 遍历链表如果发现当前节点的值和下一个节点的值相同,即cur.val = cur.next.val, 直接删除下一个节点,把当前节点指向下下个节点, 即cur.next = cur.next.next,
  2. 如果不相同,则移动当前节点到下一个节点,继续遍历,即cur = cur.next
  3. cur.next不存在时,说明遍历完了,链表没有去重的必要了

代码

/**
 * 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 == null) return head;
    let cur = head;
    while(cur.next) {
        if (cur.val === cur.next.val) {
            cur.next = cur.next.next;
        } else {
            cur = cur.next;
        }
    }
    return head;
};

原题链接

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