Leetcode 83 删除排序链表中的重复元素 ( Remove Duplicates from Sorted List *Easy* ) 题解分析

题目介绍

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

示例 1:

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

示例 2:

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

提示:

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

分析与题解

这题其实是比较正常的 easy 级别的题目,链表已经排好序了,如果还带一个排序就更复杂一点,
只需要前后项做个对比,如果一致则移除后项,因为可能存在多个重复项,所以只有在前后项不同
时才会更新被比较项

code

public ListNode deleteDuplicates(ListNode head) {
    // 链表头是空的或者只有一个头结点,就不用处理了
    if (head == null || head.next == null) {
        return head;
    }
    ListNode tail = head;
    // 以处理节点还有后续节点作为循环边界条件
    while (tail.next != null) {
        ListNode temp = tail.next;
        // 如果前后相同,那么可以跳过这个节点,将 Tail  ---->   temp  ---> temp.next 
        // 更新成  Tail ---->  temp.next
        if (temp.val == tail.val) {
            tail.next = temp.next;
        } else {
            // 不相同,则更新 tail
            tail = tail.next;
        }
    }
    // 最后返回头结点
    return head;
}

链表应该是个需要反复的训练的数据结构,因为涉及到前后指针,然后更新操作,判空等,
我在这块也是掌握的不太好,需要多练习。