LeetCode 82. 删除排序链表中的重复元素 II

题目

LeetCode 82. 删除排序链表中的重复元素 II

代码在这里插入图片描述

代码解释

初始化

执行:0
与链表的其他题目类似,为了防止删除头结点的极端情况发生,先创建空结点dummy(newHead),使dummy指向传入的head结点。
初始

第一次循环:

执行代码:1—while条件不满足,不执行
执行代码:2.2—newListNode指向oldListNode(虚线框)
执行代码:3—oldListNode从虚线框的位置到下一个位置,得到下图
在这里插入图片描述

第二次循环跟第一次一样,得到下图

在这里插入图片描述

第三次循环

执行代码:1—while条件满足,执行while中的代码,跳出while后,num的值为2,oldListNode指向虚线框
执行代码:2.1—newListNode的next指向4(注意:仅是将next指向4,newListNode还未指向4)
执行代码:3—oldListNode指向4
得到下图
在这里插入图片描述

第四次循环同第三次,循环结束后,

newListNode的next指向5(注意:仅是将next指向5,newListNode还未指向5)
oldListNode指向5
在这里插入图片描述

第五次循环

执行代码:2.2—newListNode指向oldListNode(虚线框)
执行代码:3—oldListNode从虚线框的位置到下一个位置,得到下图
在这里插入图片描述

第六次循环条件不满足,不执行循环,执行return语句

附录:代码

public ListNode deleteDuplicates(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        // 用来存储最后返回的链表的头
        ListNode newHead = new ListNode(-1);
        newHead.next = head;
        // 新的的链表移动节点,通过该节点来建立新的链表
        ListNode newListNode = newHead;
        // 用来计算重复节点的临时节点,用来遍历旧的链表
        ListNode oldListNode = head;
        while (oldListNode != null) {
            int num = 1;
            // 如果旧的链表活动节点的next不为空,且该节点的值和该节点的下个节点的值不为空,则重复数++
            while (oldListNode.next != null && oldListNode.val == oldListNode.next.val) {
                ++num;
                oldListNode = oldListNode.next;
            }

            if (num >= 2) {
                // 有重复节点的话跨过重复节点,即将newListNode的next指向重复节点后面的节点,即将重复节点后面的节点添加到新的链表
                newListNode.next = oldListNode.next;
            } else {
                // 无重复节点的话则将newListNode移动到下一个节点。因为这两个节点之间是已经连接起来的,直接移动newListNode到下一个节点
                newListNode = oldListNode;
            }

            // 移动旧节点到下一个节点
            oldListNode = oldListNode.next;
        }
        return newHead.next;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值