Leetcode面试经典150题-82.删除排序链表中的重复元素II

之前写过这个题的基础第83题,看本文之前一定要先看懂这个Leetcode面试经典150题-82.删除排序链表中的重复元素II前序-83.删除排序链表中的重复元素_删除链表中重复的元素-CSDN博客

直接上代码了,解法都在代码里,不懂就留言或者私信

java 复制代码
/**
 * 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) {
        /**空链表或者只有1个的,不涉及这个问题,直接返回原链表即可*/
        if(head == null || head.next == null) {
            return head;
        }
        /**因为有换头的可能性,先用一个空节点作为头,这样后面出现换头也会挂在它后面,它后面最终的就是头*/
        ListNode dummy = new ListNode(-101);
        dummy.next = head;
        ListNode cur = dummy;
        ListNode next = null;
        ListNode nextNext = null;
        /**如果next节点为null,也没啥可遍历的了 */
        while(cur != null && cur.next != null && cur.next.next != null) {
            /**cur是我们确定了不会重复的节点,它的next和next.next就是接下来的两个节点
            如果两个节点不相同,就要next作为下个cur,否则两个都不要,如果后面出现很多个这个值也不要*/
            if(cur.next.val != cur.next.next.val) {
                cur = cur.next;
            } else {
                /**如果相等说明有重复,找到后面第一个不重复的*/
                int x = cur.next.val;
                /**往后一直找找到第一个和cur的next不同的节点,但是这个节点也不一定就不重复
                它还要执行if里的和它后面的节点是否相同的判断 */
                while(cur.next != null && cur.next.val == x) {
                    /**出循环的时候cur的next指向它后面第一个不相同的节点 */
                    cur.next = cur.next.next;
                }
            }
        }
        return dummy.next;

    }
}/**
 * 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) {
        /**空链表或者只有1个的,不涉及这个问题,直接返回原链表即可*/
        if(head == null || head.next == null) {
            return head;
        }
        /**因为有换头的可能性,先用一个空节点作为头,这样后面出现换头也会挂在它后面,它后面最终的就是头*/
        ListNode dummy = new ListNode(-101);
        dummy.next = head;
        ListNode cur = dummy;
        ListNode next = null;
        ListNode nextNext = null;
        /**如果next节点为null,也没啥可遍历的了 */
        while(cur != null && cur.next != null && cur.next.next != null) {
            /**cur是我们确定了不会重复的节点,它的next和next.next就是接下来的两个节点
            如果两个节点不相同,就要next作为下个cur,否则两个都不要,如果后面出现很多个这个值也不要*/
            if(cur.next.val != cur.next.next.val) {
                cur = cur.next;
            } else {
                /**如果相等说明有重复,找到后面第一个不重复的*/
                int x = cur.next.val;
                /**往后一直找找到第一个和cur的next不同的节点,但是这个节点也不一定就不重复
                它还要执行if里的和它后面的节点是否相同的判断 */
                while(cur.next != null && cur.next.val == x) {
                    /**出循环的时候cur的next指向它后面第一个不相同的节点 */
                    cur.next = cur.next.next;
                }
            }
        }
        return dummy.next;

    }
}
相关推荐
Jasmine_llq2 小时前
《B3867 [GESP202309 三级] 小杨的储蓄》
算法·循环遍历·数组累加(模拟)·索引定位·顺序输出
啦啦啦_99992 小时前
案例之 逻辑回归_电信用户流失预测
算法·机器学习·逻辑回归
风筝在晴天搁浅2 小时前
快手/字节 CodeTop LeetCode 415.字符串相加
算法·leetcode
DragonnAi2 小时前
猫咪如厕检测与分类识别系统系列【十四】 项目结构重新整理-即将开源完整算法
算法·开源
机器视觉_Explorer3 小时前
【halcon】编程技巧:鼠标擦除
图像处理·人工智能·深度学习·算法·视觉检测
灵智实验室3 小时前
PX4状态估计技术EKF2详解(二):EKF2 误差状态动力学与协方差传播
算法·无人机·px 4
米粒14 小时前
力扣算法刷题 Day 64 Floyd算法 & A* 算法 & 总结篇
算法·leetcode·职场和发展
XX風4 小时前
OpenGL中Face culling 面剔除的具体实现
算法·图形渲染
青山师4 小时前
动态代理深度解析:JDK与CGLIB底层实现与实战
java·设计模式·面试·动态代理·java面试·cglib
IT猿手4 小时前
光伏模型参数估计:基于山羊优化算法(GOA )的光伏模型参数辨识问题求解研究,免费提供完整MATLAB代码链接
开发语言·算法·matlab·群智能优化算法·智能优化算法·光伏模型参数估计·光伏模型参数辨识