java数据结构与算法刷题-----LeetCode83:删除排序链表中的重复元素

【经典算法】Leetcode.83删除排序链表中的重复元素(Java/C/Python3/Go实现含注释说明,Easy) 方式优点缺点时间复杂度空间复杂度方式一(双指针迭代)不使用递归,内存占用稳定代码相对复杂,需要处理边界情况O(n)O(1)方式二(递归)代码简洁,逻辑清晰递归深度可能导致栈溢出,内存占用不稳定O(n)O(n) 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

  1. 思路分析
  1. 整个链表按升序排列完成
  2. 结点数目在[0,300],所以需要考虑结点个数为0的情况
  3. 结点的值在-100~100之间,需要考虑值为0和负数的情况,最好直接通过>等条件运算符比较
  4. 因此,可以通过两个指针来完成。两个指针,第一个指针指向当前结点的前一个结点,第二个指针指向当前结点,
  5. 如果两个结点值一样,放弃当前结点,让前一个结点的后继指向当前结点的后继,当前结点后移,继续判断
  6. 如果不一样,两个指针一起后移
  1. 代码
    在这里插入图片描述
/**
 * 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) return head;//考虑结点个数为0的情况
        ListNode pre = head;//指针1,指向当前结点的前一个指针
        ListNode current = head.next;//指针2,当前判断结点
        while(current != null){//如果没有可遍历结点,就退出
            if(pre.val == current.val){//如果值相等
                pre.next = current.next;//删除当前结点
                current = current.next;//当前结点指针后移
            }else{//如果值不相等
                pre = current;//指针1后移
                current = current.next;//指针2后移
            }
        }
        return head;
    }
}

刷题一定要坚持,总结套路,不单单要把题做出来,要举一反三,也要参考别人的思路,学习别人解题的优点,找出你觉得可以优化的点。

  1. 单链表解题思路:双指针、快慢指针、反转链表、预先指针
  1. 双指针:对于单链表而言,可以方便的让我们遍历结点,并做一些额外的事
  2. 快慢指针:常用于找链表中点,找循环链表的循环点,一般快指针每次移动两个结点,慢指针每次移动一个结点。
  3. 反转链表:通常有些题,将链表反转后会更好做,一般选用三指针迭代法,递归的空间复杂度有点高
  4. 预先指针:常用于找结点,比如找倒数第3个结点,那么定义两个指针,第一个指针先移动3个结点,然后两个指针一起遍历,当第一个指针遍历完成,第二个指针指向的结点就是要找的结点
  1. 数组解题思路:双指针、三指针,下标标记
  1. 双指针:多用于减少时间复杂度,快速遍历数组
  2. 三指针:多用于二分查找,分为中间指针,左和右指针
  3. 下标标记:常用于在数组范围内找东西,而不想使用额外的空间的情况,比如找数组长度为n,元素取值范围为[1,n]的数组中没有出现的数字,遍历每个元素,然后将对应下标位置的元素变为负数或者超出[1,n]范围的正数,最后没有发生变化的元素,就是缺少的值。
【简单】力扣算法题解析LeetCode83:删除排序链表中的重复元素 本文介绍如何删除已排序链表中的重复元素,确保每个元素仅出现一次。通过遍历链表,比较相邻节点的值,跳过重复节点即可实现。算法时间复杂度为O(n),空间复杂度为O(1)。提供Java代码实现,包含指针初始化和循环处理逻辑,最后返回修改后的链表头节点。附有示例和提示说明,帮助理解解题思路。 阅读详情

相关推荐

Jetson-nano 编译实时内核并烧录

前言 之前一篇文章介绍了正常的烧录过程,使用的是默认内核,实际工作中需要对内核打补丁升级为实时内核,并对其重编译。 一、准备内容 官网大法好 官方内核下载链接 官方交叉编译器下载链接 官方文档 ubuntu主机一台 根据官网选择下载对应的文件, 1、L4TDriver Package (BSP) source jetson内核文件。 2、官方交叉编译器 因为我们不是在jetson上直接编译,而jetson是arm平台,所以要进行交叉编译。 二、使用步骤 1.解压 内核 tar -xjf public_s

ldl371122的博客 3288

LeetCode刷题汇总

剑指offer 剑指 Offer 03 数组中重复的数字 剑指 Offer 04 二维数组中的查找 剑指 Offer 05 替换空格 剑指 Offer 06 从尾到头打印链表 剑指 Offer 07 重建二叉树 剑指 Offer 09 用两个栈实现队列 剑指 Offer 10- I 斐波那契数列 剑指 Offer 10- II 青蛙跳台阶问题 剑指 Offer 11 旋转数组的最小数字 剑指 Offer 12 矩阵中的路径 剑指 Offer 13 机器人的运动范围 剑指 Offer 14- I 剪绳子 剑指

weixin_44171872的博客 2万+

(一)利用Python实现数据集读取,Python基本文件操作介绍

机器学习是计算机对大量数据的分析过程,在机器学习的实际项目中,通常都需要准备数据集,数据集通常包含的数据数量是庞大的。例如,在处理计算机视觉领域的项目时,每一张图片都是一个单独的文件,为了提高模型训练的效果,图片数量通常会比较多,因此需要合理且高效的操作将所有的图片数据读取。本篇旨在介绍如何用Python对海量文件进行遍历,也是机器学习实践的第一步。.........

ZZR2631574030的博客 6357

83. 删除排序链表中的重复元素

本文解析LeetCode 83题《删除排序链表中的重复元素》,针对有序链表的去重问题提出了高效的解决方案。算法利用链表有序特性,通过单次遍历和指针跳跃操作(外层循环定位当前节点,内层循环跳过重复节点)实现去重,时间复杂度O(n),空间复杂度O(1)。文章详细解析了代码逻辑,包括虚拟头节点的使用、指针操作细节,并通过多个测试用例验证算法正确性。该解法展现了如何利用数据结构特性优化算法,是链表基础操作的经典案例,为处理更复杂链表问题奠定基础。

mrjieke6的博客 1098

最新扣子(coze)案例:在coze上用DeepSeek+私有数据库、知识库,创建你的专属智能体

Gartner预测,到2026年,70%的企业将通过Al知识库实现「组织记忆外化」。数字化时代,数据已成为企业发展的核心资产。我们通过人工智能将知识库从“静态存储"升级为“智能服务”。让"沉睡宝藏"焕发新生,助力企业突破数据困局。

weixin_72689845的博客 2166

保姆级教程:用ESP32-S3点亮你的第一块ili9341触摸屏(附完整源码与避坑指南)

本文提供了一份详细的ESP32-S3与ili9341触摸屏的入门指南,涵盖硬件连接、环境配置、驱动补全、触摸校准及图形界面开发等关键步骤。特别针对新手常见问题提供解决方案,并附完整源码与避坑技巧,帮助开发者快速上手嵌入式图形界面开发。

weixin_26854829的博客 246

Java实现 LeetCode 83 删除排序链表中的重复元素

83. 删除排序链表中的重复元素 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 /** * Definition for singly-linked list. * public class Lis...

南 墙 1万+

TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

官方代码:https://github.com/Beckschen/TransUNet 目的:训练5个类别的汽车部件分割任务(测试在另一篇博客中) 实现效果: 1. github下载代码,并解压。 项目里的文件可能跟你下载的不一样,不急后面会讲到! 2. 配置数据集(尽最大努力还原官方数据集的格式)。 通常自己手上的数据集分images和labels文件夹,分别存放着原始图像和对应的mask图像,如下图所示; mask图像中的像素有0,1,2,3,4 分别代表背景,车身,轮子,车灯,窗户,一共五个

qq_37652891的博客 5万+

【LeetCode: 83. 删除排序链表中的重复元素 + 链表】

【LeetCode: 83. 删除排序链表中的重复元素 + 链表】给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。

Coder_ljw的博客 1178

头歌操作系统2023春季课堂练习2.1:外部中断

本关任务:通过相关知识以及实验回答:版本 1 内核的第 6 次时钟中断发生时,断点和恢复点(指令地址)分别是多少?回答问题:当第一行 0/1 字符全部输出完毕的时候一共发生了几次时钟中断,即第一行完全填满时 jiffies 记录的已发生次数为多少?本关任务:通过实际操作回答在输出第一行 0/1 字符的过程中(如下图所示),共发生了几次时钟中断?2.此时 bochs 虚拟机输出的 0/1 字符串是什么?(只填写数字,不填写空格!根据相关知识进行实际操作,一直输入 c 直到 0/1 将第一行完全填满。

weixin_64821608的博客 8131

【项目实战】DevOps制品管理之JFrog Artifactory介绍

JFrog Artifactory是一款领先的二进制软件制品仓库管理工具,由JFrog公司开发。

奶爸的编程之路,也就一周冷个三天 1356

LeetCode Java面试刷题笔记汇总

LeetCode Java刷题笔记汇总,按照类型刷题效率更高。

终生学习践行者 2948

Harness Engineering:让Coding Agent真正落地生产

本文将带你系统性地了解如何让Coding Agent真正落地生产,核心是依托(全球领先的持续交付、云成本管理、 feature flagging、安全治理一体化平台),结合企业级AIDD(AI-Driven Development)的工程化实践,构建一套可信赖、可观测、可扩展、可治理的Coding Agent落地体系。核心概念与理论基础:什么是Coding Agent?它和普通的AI代码补全工具(比如GitHub Copilot)有什么区别?什么是Harness Engineering?

移动开发前沿的博客 456

算法leetcode|83. 删除排序链表中的重复元素(rust重拳出击)

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

二当家的白帽子 1604

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

本文详细解析了 LeetCode 82 题「删除排序链表中的重复元素 II」的解法。通过使用哑节点(dummy node)统一处理头节点可能被删除的情况,采用双指针遍历链表,当发现重复元素时内层循环跳过所有重复节点。该算法时间复杂度 O(n),空间复杂度 O(1),高效解决了保留唯一元素的问题,并对比了与「删除重复元素 I」的不同处理逻辑。

mrjieke6的博客 977

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LeetCode-83. 删除排序链表中的重复元素(java)

金三银四,又到了刷题月。有时间的话,希望大家还是尽量刷起来咯。帮助往往不是直接体现出来的,但会让你对很多东西的底层实现了解的更深刻。

**My Coding Family** 1570

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

算法leetcode|82. 删除排序链表中的重复元素 II(rust重拳出击)

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

二当家的白帽子 1782

LeetCode Java刷题笔记—82. 删除排序链表中的重复元素 II

LeetCode Java刷题笔记—82. 删除排序链表中的重复元素 II

终生学习践行者 1624

【链表】LeetCode #83 删除排序链表中的重复元素 (两种方法)

题目链接: LeetCode #83 删除排序链表中的重复元素 题目描述: #83. 删除排序链表中的重复元素 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 通过次数123,788 提交次数242,480 方法一: 直接对比当前结点的值 cur.val 与下一个结点的值 cur.next.val 是否相等,若相等

Code_Yilia的博客 301

leetcode刷题82. 删除排序链表中的重复元素 II,Medium(Java)递归+迭代

leetcode刷题83. 删除排序链表中的重复元素 II1.题目描述2.解法2.1 递归2.2 迭代 1.题目描述 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入: head = [1,2,3,3,4,4,5] 输出:[1,2,5] 示例 2: 输入: head = [1,1,1,2,3] 输出: [2,3] 提示: 链表中节点数目在范围 [0, 300] 内 -100 <= Node.val &l

Sueko的博客 1514

LeetCode083_83. 删除排序链表中的重复元素

LeetCode083_83. 删除排序链表中的重复元素

luoyepiaoxue2014的博客 646

leetcode刷题83. 删除排序链表中的重复元素,Easy (Java)

leetcode刷题83. 删除排序链表中的重复元素

Sueko的博客 967

leetcode 83. 删除排序链表中的重复元素

题目 思路 两个指针,一个cur在前面走,一个pre在后面跟。 如果当前的cur和后面的pre值相同,则将cur的next赋给pre的next。 题解 //Definition for singly-linked list. class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } class Solution { // 测试用例 1->1->2-&

寒泉 6万+

LeetCode 删除链表重复元素

LeetCode 删除链表重复元素

m0_56964271的博客 1204
上一篇: Git笔记,常用命令
下一篇: java数据结构与算法刷题-----LeetCode141:环形链表
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值