BM16 题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
解题思路:
我一开始都是绕不过弯,就是一定要用cur来获取前后值对比,但是,pre值很难获得,看解题指导视频就清楚了,关键是利用cur的 cur.next 和 cur.next.next 来提取去截取,判断了,相当于cur就是我一直朝思暮想的pre,这个一定是不同的,初始化是,就是我们的那个空表头的node -1,后面这个一定是存在,无需你特别处理的。
一旦,知道了我的cur.next节点和cur.next.next节点值相同,我就可以立刻处理掉cur.next节点了,直接直到下一个异同值就好了。
具体步骤:
1、使用while循环,遍历cur.next 和cur.next.next值是否相同
2、如果相同出现了,再用小while循环,cur.next == cur.next.next跳过相同节点
3、最后返回res.next表头
import java.util.*; public class Solution { /** * @param head ListNode类 * @return ListNode类 */ public ListNode deleteDuplicates (ListNode head) { if(head==null) { return head; } //加一个空表头,处理原表头有重复元素被清空问题 ListNode res = new ListNode(0); res.next = head; ListNode cur = res; //大while循环,遍历链表 while(cur.next!=null && cur.next.next!=null) { //小的if判空找其实重复节点 if(cur.next.val == cur.next.next.val) { int temp = cur.next.val; //将所有相同的都跳过 while(cur.next!=null && cur.next.val == temp) { cur.next = cur.next.next; //清楚相同节点就这一句话 } } else { cur = cur.next; } } return res.next; } }