LeetCode-082-删除排序链表中的重复元素II

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

示例 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

解题思路

用递归实现

  1. 如果头节点为空或者已经是尾节点,则返回头结点
  2. 如果当前节点与下一个节点相等,则循环往后遍历,跳过重复的元素,然后返回递归且参数为下一个节点
  3. 如果当前节点与下一个节点不等,则当前节点的 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;
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容