Leetcode-每日一题【83.删除排序链表中的重复元素】

该问题要求删除已排序链表中的重复元素,保持每个元素只出现一次。解决方案涉及创建一个虚拟头节点,然后使用两个指针cur和var遍历链表。当cur和var指向的节点值相等时,cur指向下一个节点,跳过当前var节点;否则,两者都向前移动。最后返回dummy.next作为结果。
摘要由CSDN通过智能技术生成

题目

给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。

示例 1:

输入:head = [1,1,2]
输出:[1,2]

示例 2:

 

 

输入:head = [1,1,2,3,3]
输出:[1,2,3]

提示:

  • 链表中节点数目在范围 [0, 300] 内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序 排列

解题思路

1.设置一个虚拟头节点 dummy,令 dummy.next  指向链表的头节点 head,

2.设置一个 cur 节点令它指向 dummy,再设置一个 var 节点令它指向 head,

3.用 cur 节点和 var 节点对链表进行遍历,结束条件是 var 指向 null,如果 cur 节点的值等于var 节点的值,我们就令 cur 节点的 next 节点为 var 节点的 next 节点,也就是删除 var 节点,令 var 节点向后走一步,而 cur 节点不动(注意这里:如果 cur 节点也向下走一步,我们很有可能会漏删相同的节点),直接进行下一次循环,再次进行判断,若 cur 节点不等于 var 节点则两个节点都向后走一步。直到 while 循环结束,返回 dummy.next 即可。

代码实现

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        ListNode dummy = new ListNode(101);
        dummy.next = head;
        ListNode cur = dummy;
        ListNode var = head;
        while(var != null){
            if(cur.val == var.val){
                cur.next = var.next;
            }else{
                cur = cur.next;
            }
            var = var.next;
        }
        return dummy.next;
    }
}

测试结果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值