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;
    }
}
全部评论

相关推荐

04-29 22:35
门头沟学院 Java
牛友说改了名字能收到offer:旧图新发查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务