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