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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
}

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