给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii
解题思路
用递归实现
- 如果头节点为空或者已经是尾节点,则返回头结点
- 如果当前节点与下一个节点相等,则循环往后遍历,跳过重复的元素,然后返回递归且参数为下一个节点
- 如果当前节点与下一个节点不等,则当前节点的 next 赋值为递归调用且参数为下一个节点,且返回当前节点
代码
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) {
return head;
// 当前节点与下一个节点相等
} else if (head.val == head.next.val) {
while (head.next != null && head.val == head.next.val) {
head = head.next;
}
return deleteDuplicates(head.next);
// 当前节点与下一个节点不等
} else {
head.next = deleteDuplicates(head.next);
return head;
}
}
}