【图解 + 注释详细】【打卡第1天】leetcode算法HOT热题之Java实现:83. 删除排序链表中的重复元素

1、题目描述

 删除排序链表中的重复元素。

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。

返回同样按升序排列的结果链表。

示例 1:

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

2、算法分析

  ①  首先判断head是否为空,head.next是否为空

  ②  判断链表中相邻元素是否相等,相等的话,head指向head.next,指向重复元素,判断重复元素和下一个元素是否相等,继续往下

  ③  判断如果链表中不相等的话,head.next 指向的是持续不相等的下一个结点

3、代码实现

/**
 * 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; }
 * }
 */
/*
    1、链表是升序的链表,链表的头结点是head
    2、删除链表中所有重复的元素,
*/
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        
        // 判断头结点是否为空
        if(head == null){
             return null;
        }
        
        // 如果头结点下一个结点,返回null
        if(head.next == null){
            return head;
        }
        
        // 当相邻结点的值相等的时候,head跳过相等的值继续往右走
        if(head.val == head.next.val){
            head = deleteDuplicates(head.next);
            
            // 当不相等的时候,指针往右走一个
        } else{
            head.next = deleteDuplicates(head.next);
        }
        return head;
    }
}

猜你喜欢

转载自blog.csdn.net/Sunshineoe/article/details/115257081