当前位置 : 主页 > 编程语言 > java >

力扣-删除排序链表中的重复元素

来源:互联网 收集:自由互联 发布时间:2023-09-03
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head = [1,1,2]输出:[1,2] 示例 2: 输入:head = [1,1,2,3,3]输出:[1

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

 

示例 1:

力扣-删除排序链表中的重复元素_链表

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

示例 2:

力扣-删除排序链表中的重复元素_递归调用_02

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

 

提示:

  • 链表中节点数目在范围 [0, 300] 内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序 排列
/**
 * Definition for singly-linked list.
 * 单链表的定义
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        // 检查链表是否为空或只包含一个元素
        // 如果是,没有重复元素需要删除,直接返回原链表
        if (head == null || head.next == null)
            return head;
        
        // 检查当前节点和下一个节点的值是否相等
        // 如果相等,跳过当前节点,对下一个节点进行递归调用deleteDuplicates
        // 这样可以移除所有连续的重复节点
        if (head.val == head.next.val) {
            head = deleteDuplicates(head.next);
        } else {
            // 如果当前节点和下一个节点的值不相等,
            // 将下一个节点设置为deleteDuplicates递归调用后的结果
            head.next = deleteDuplicates(head.next);
        }
        
        return head;
    }
}
网友评论