当前位置: 首页 > news >正文

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

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

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

/*** 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;}
}


http://www.mrgr.cn/news/25514.html

相关文章:

  • 59 - I. 滑动窗口的最大值
  • Linux 三种方式查看和设置主机名
  • OpenStack创建快照原理
  • JMM 指令重排 volatile happens-before
  • shader 案例学习笔记之偏移
  • 【时时三省】c语言例题----华为机试题<进制转换>
  • Java11环境安装(Windows)
  • 学习Vue3的第五天
  • 使用dnSpy调试服务端IIS部署的WebService的程序集
  • Java重修笔记 第五十四天 坦克大战(四)多线程基础
  • 大模型微调 - 用PEFT来配置和应用 LoRA 微调
  • C语言初识编译和链接
  • [M二分答案] lc2576. 求出最多标记下标(二分答案+同向双指针+贪心)
  • 操作系统 ---- 处理机调度
  • 配环境时的一些记录
  • 【Colab代码调试】End-to-end reproducible AI pipelines in radiology using the cloud
  • Vue: 创建vue项目
  • Win32编程:创建属于你的第一个窗口
  • 贪心算法day30|452. 用最少数量的箭引爆气球(排序+多重叠的处理)、435. 无重叠区间(去除哪个才是最优)、763. 划分字母区间(类阿斯克码换算)
  • 《JavaEE进阶》----16.<Mybatis简介、操作步骤、相关配置>