题目:
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
返回同样按升序排列的结果链表。
示例 1:
输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]
示例 2:
输入:head = [1,1,1,2,3]
输出:[2,3]
提示:
- 链表中节点数目在范围 [0, 300] 内
- -100 <= Node.val <= 100
- 题目数据保证链表已经按升序排列
我采用的是递归的做法:
拿下一个结点的值和当前结点比较,如果相等跳过该结点获取下一个结点继续比较;
否则保留该节点继续获取下一个。
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) {
return head;
}
// 记录下一个结点
ListNode next = head.next;
// 如果当前结点的值等于下一个结点的值
if (head.val == next.val) {
// 跳过值相等的结点,出现连续相等的情况
while (next != null && head.val == next.val) {
next = next.next;
}
// 递归
head = deleteDuplicates(next);
} else { // 如果值不相等,则继续递归
head.next = deleteDuplicates(next);
}
return head;
}
}