LeetCode第83题删除排序链表中的重复元素

继续打卡算法题,今天学习的是第83题删除排序链表中的重复元素,这道题目是道简单题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。

分析一波题目

本题如果使用hashmap存储已经存在的元素,使用一个新链表构建不重复的元素,这种解法很好理解。不过使用了额外空间,如果可以在原链表上操作就最佳了。 我们可以使用双指针的思路来实现这种解法。一个指针在前,一个指针在后。如果和前面的指针相同,则去除当前阶段。

如果有重复节点,需要去除重复的,通过修改prev.next指针和curr节点指针就可以移除

本题解题技巧

1、使用前后双指针,判断是否重复,并且完成去重的逻辑。

编码解决

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        //特殊情况
        if(head == null || head.next == null) {
            return head;
        }
        ListNode dumy = new ListNode(0, head);
        ListNode prev = head;
        ListNode curr = head.next;

        while(curr != null ) {
            //重复的情况,移除当前重复元素
            if(curr.val == prev.val) {
              ListNode temp =  curr.next;
              prev.next = temp;
              curr = temp;
            } else {
                //不重复的情况
                ListNode temp =  curr.next;
                prev = curr;
                curr = temp;
            }
        }

        return dumy.next;

    }
}

总结

1、双指针解决有序数组去重复,有序链表去重都具备一样的效果,解法比较巧妙,性能比较高,双指针法相关的题目也是面试中比较常问的题目

相关推荐
码事漫谈3 小时前
骂AI,会让它做得更好吗?
后端
丑陋小蚊子4 小时前
邮件投简历,正文和附件各写什么?
面试·求职招聘·大学生·简历·简历下载
陈随易4 小时前
bm2,Node.js 与 Bun 项目部署新选择
前端·后端·程序员
奋发向前wcx4 小时前
CSP-J复赛模拟赛4 王晨旭补题 2026.10.5
算法
架构技术专栏5 小时前
学习率:一次参数更新,到底应该改多少
面试
架构技术专栏5 小时前
AI Agent 框架怎么选:从一次制度查询拆出技术边界
后端·面试
念何架构之路6 小时前
zap采样器与性能优化内幕
算法·性能优化·哈希算法
明月_清风7 小时前
SaaS 的三层挣钱逻辑,正在被 AI 从第一层击穿
人工智能·后端
晒太羊的猫7 小时前
hot100动态规划刷题
算法·动态规划
weixin_531094698 小时前
heap_4内存管理
java·开发语言·算法