Leetcode删除排序链表中的重复元素算法与分析

Ubuntu20.04实时内核补丁PREEMPT_RT编译与安装全流程解析 本文详细解析了在Ubuntu20.04系统上编译与安装实时内核补丁PREEMPT_RT的全流程。从内核与补丁版本匹配、编译环境准备,到内核配置、编译排错,再到最终安装、验证与进阶优化,提供了手把手的实战指南,旨在帮助机器人、工业控制等对实时性有苛刻要求的开发者构建低延迟、高确定性的Linux系统。 阅读详情

@Leetcode删除排序链表中的重复元素

相比之前的在排序数组中删除重复项的题,这题的思路明显要明晰了许多,就看各位coder的手法如何了!请看题干:

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:

输入: 1->1->2
输出: 1->2

示例 2:

输入: 1->1->2->3->3
输出: 1->2->3

如果各位看官对数据结构中十分重要的一章:线性表结构,那么这题便是手到擒来,请看代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        ListNode *flag=head;
        while(flag!=NULL&&flag->next!=NULL)
        if(flag->val==flag->next->val)
            flag->next=flag->next->next;
        else
            flag=flag->next;
        return head;
    }
};

在这里插入图片描述
请不要觉得本题有什么快捷方法,这就是一道考你的基本功的题,考验你对链表结构的熟练使用,别的方法都不符合出题人的意志。无论你要删除哪一个表结点,首先你需要找到这个结点的后继结点,也就是flag->next,然后让你需要删除的这个结点的前驱,也就是前一个结点,把他的指针指到这个后继结点上,这就完成了删除。失去了指针的结点很快就会因为没有被指向而被认为是无用空间而被后台当作垃圾清理掉并释放空间。在找到这个结点只要不停地往后遍历就行,每次都比较这个结点的val值是否与其后继结点相同即可。

这里要注意一个小问题,在while的判断中需要优先判断flag是否为空再判断flag->next,也就是&&两端不能写反,否则你会出现如下的错误:
在这里插入图片描述
笔者亲测,小问题也有小细节,希望大家都注意哦。

权重衰减weight_decay参数从入门到精通 Weight Decay是一个正则化技术,作用是**抑制模型的过拟合**,以此来提高模型的泛化性。 目前网上对于Weight Decay的讲解都比较泛,都是短短的几句话,但对于其原理、实现方式大多就没有讲解清楚,本文将会逐步解释weight decay机制。 阅读详情

相关推荐

TMS320F28377D的sys/bios双核工程配置详解——从零搭建到RAM优化

本文详细解析了TMS320F28377D双核系统在sys/bios环境下的工程配置与RAM优化策略。从开发环境搭建、SYS/BIOS工程创建到双核CMD文件配置,提供了实战技巧和常见问题解决方案,帮助开发者高效实现电力电子控制系统中的双核协作与性能优化。

weixin_28292761的博客 600

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

Question 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 方法一 当然是递归大法 当head后面有值并且和head的值相等,则一直找到与head不相等为止,然后对后面一个结点去递归,这样就删除了前面重复的结点 当head后面有值且与head的值不相等时,那么就递归后面一个结点,跟在head后面 最后返回head 思路还是很简单的,代码如下: /** * Definition for singly-linked list.

qq_51553911的博客 1226

IT运维必备 开源Urbackup 备份系统部署教程 实战操作

手动添加ip方式检查是否在线 ,linux需要按上述步骤6配置server端地址 不然一直不会进去状态栏。安装依赖sudo apt install -y libcrypto++-dev。补充客户端手动触发备份命令 (一般在服务端操作即可,特殊情况客户端进行操作)修改ubuntu主机名 建议修改为ip 方便上线以ip命名上线。默认客户端安装完毕大概几分钟之内服务端会自动上线。配置客户端指向server端地址。(2)ubuntu 客户端设置。新起一个远程窗口查看配置状态,配置客户端备份文件目录。

qq_34981755的博客 1281

每日leetcode[删除排序链表中的重复元素]

主要是为了找到重复的元素,由于链表的顺序是已经排好的,所以只需要比对当前指针所指的值与下一个值是否相同即可,如果相同,进行移除,如果不同,向后移动即可,注意遍历大宋最后一个节点的情况。//定义一个指针进行位置移动。while(cur->next)//当不为空值时。删除所有重复的元素,使每个元素只出现一次。给定一个已排序的链表的头。

weixin_62802660的博客 386

深入解析DDR5 RFM机制:从JESD79-5标准到硬件实现

本文深入解析了DDR5内存标准中的关键机制——RFM(Refresh Management)。文章从JESD79-5标准出发,详细阐述了RFM如何通过RAA计数器实现从被动定时到主动响应的智能刷新管理,并探讨了其硬件实现细节、命令调度挑战及系统级设计考量,为芯片设计工程师优化DDR5内存子系统性能与可靠性提供了实践指导。

fff88的博客 491

ICC2 实战秘籍:create_workspace 命令全解析

必选项:工作区名称,这可是创建工作区的 “身份证”,必不可少。技术数据选项匹配:优先考虑用 -technology 直接加载技术文件,这是获取最新、最准确技术数据的首选路径;要是已经有合适的技术库了,那 -use_technology_lib 引用现有技术库也能快速上手。精度设置优先规则:技术文件自动配置排在第一位,能自动适配就别手动操心;要是自动配置不理想,那就显式指定 scale_factor;实在没要求,就用默认配置,但得清楚它的精度限制。

weixin_50820814的博客 1124

LeetCode - 删除排序链表中的重复元素

循环遍历,如果当前节点值等于下一个节点值,则将当前节点下一个节点设为下下个节点,跳过相同值的节点。否则,当前节点等于下个节点,向后遍历链表。

小小太空人的博客 324

避坑指南:DeepSeek Function calling流式输出中的常见问题与解决方案

本文深入探讨了在DeepSeek Function Calling中实现流式输出时常见的参数拼接、函数依赖管理和错误处理等核心挑战。针对流式响应中参数碎片化的问题,提供了健壮的参数拼接方案与状态管理策略。同时,文章详细阐述了如何管理函数调用顺序、处理条件性执行,并构建了分阶段的错误处理与重试机制,旨在帮助开发者构建稳定、高效的流式AI应用。

weixin_29062671的博客 203

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

81. 删除排序链表中的重复元素 题目描述: 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3   思路:使用两个相邻的指针,如果后面的指针的数值和前面的指针相同,那么删除后面的指针指...

sinat_15723179的博客 632

ESP32 驱动 SYN6288 语音合成:Arduino IDE 下实现中文数字混合文本的智能播报

本文详细介绍了如何在Arduino IDE环境下使用ESP32驱动SYN6288语音合成模块,实现中文数字混合文本的智能播报。通过硬件选型、开发环境搭建、编码转换原理、命令帧构造及串口通信实战等步骤,帮助开发者快速掌握语音播报技术。文章还提供了混合文本处理技巧和常见问题排查方法,适合智能硬件开发者参考。

weixin_42553471的博客 448

Open-Sora代码详细解读(1):解读DiT结构

目前开源的DiT视频生成模型不是很多,Open-Sora是开发者生态最好的一个,涵盖了DiT、时空DiT、3D VAE、Rectified Flow、因果卷积等Diffusion视频生成的经典知识点。本篇博客从Open-Sora的代码出发,深入解读背后的原理。

沉迷单车的追风少年 2264

算法题007 -- [对给定的排好序的链表,删除重复的元素,只留下出现一次的元素] by java

对给定的排好序的链表,删除重复的元素,只留下出现一次的元素 举例: 1->1->2, return 1->2. 1->1->2->3->3, return 1->2->3. 代码 package algorithm7; import algorithm6.ListNode; public class Algorithm7 { pub...

jiahuan 486

rv1126如何切换720p和1080p

切换720p和1080p可以使用modetest,但是需要将这两种模式都添加到connector中去 添加一个新的mode到connector中去,其实内核中已经有相关接口了,需要做一些小改动。 1.不采用设备树的方式去配置,将720p和1080p的timing参数配置放在数组中。 2.这里的printer和设备树中的.compatible = "printer"一致。 3.将其添加到connector中去 static int panel_simple_get_fixed_modes(struct

weixin_42097108的博客 864

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

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

qq_40263592的博客 1451

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

4.22算法题

我们可以总结出来一个规律,凡是链表题里面涉及到找某个节点的,我们都可以使用双指针,这是双指针最基础的考法。我们要删除某个节点,我们必须要知道它前一个节点的地址,移动前一个节点的指针,因此在前后指针移动完毕的时候,后指针其实需要指向倒数第n+1个节点。如果我们的测试用例为{1},1,如果我们按照上文所说,让前指针多移动一个节点,那就会访问到空节点,就会导致程序报错。并且此时我们的判断条件不能是判断node的下一节点是非为空,因为node下一节点是非为空,并不影响我们对于多次重复元素的筛选。

2401_89605914的博客 2179

VC中sqlite的使用

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

力扣83题——【删除排序链表中的重复元素】

1.curr在前,prev在后,双指针法交替移动写出大纲2.如果遇到重复元素,更新新箭头,然后移动curr,curr可能不存在继续判断3.curr不存在跳出循环4.考虑到一直有重复元素,将if改为while5.再次添加非空判断,结束循环。

2201_75478206的博客 259

LeetCode-82. 删除排序链表中的重复元素 II【链表 双指针】

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字。输入:head = [1,1,1,2,3]链表中节点数目在范围 [0, 300] 内。原创文章,转载告知,盗版必究。输出:[1,2,5]时间复杂度:O(n)空间复杂度:O(1)时间复杂度:O(n)空间复杂度:O(1)时间复杂度:O(n)空间复杂度:O(n)

zik的博客 699

LeetCode 82. 删除排序链表中的重复元素 II (C语言)

82.删除排序链表中的重复元素 II Description 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现的数字。 Analyze 链表操作,删除一个有序链表中的所有重复元素。 给定函数如下: @param head 链表的头结点(带数据) 首先考虑特殊情况: 给定的链表为空 给定的链表只有一个元素 上述两种都是特殊情况,但在此题处理方法都是一样的,即返回给定的链表 然后考虑一般情况: 比较发现当前结点和下一结点值相同时,应当把当前结点和下一结点一.

狂吃不胖温同学的博客 612

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

【代码】LeetCode 83、删除排序链表中的重复元素。

2303_76162328的博客 110

链表的问题

链表问题 链表删除 递归

qq_45716444的博客 218

leetcode9: 爬楼梯(70)、删除排序链表中的重复元素(83)

1.爬楼梯 假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 思路:分析题意可知,第三层的上楼方法是(第一层)与(第二层)的和。p[i] = p[i-1]+p[i-2].所以只需要使用for循环更新即可。 class Solution { public: int climbS...

init_bin的博客 179

考核题解析

我们要删除某个节点,我们必须要知道它前一个节点的地址,移动前一个节点的指针,因此在前后指针移动完毕的时候,后指针其实需要指向倒数第n+1个节点。我们如果使用if,就代表我们只会进行一步回退,只会把[4]踢出窗口,可是剩下的[3,8]也不符合要求,继续这么计算就会导致ans多加了1,导致后面的计算也出现问题,最后导致答案错误。做这道题选择了不完全暴力的做法,就是只用遍历所有链表当前的头结点,找出值最小的节点,然后接到新创建的链表尾部,并将对应链表的指针后移,直到所有链表都为空,返回合并后的新链表即可。

2401_89605914的博客 690

[算法] leetcode单链表相关题目详解(三)

leetcode

weixin_43717520的博客 559

每日5题Day17 - LeetCode 81 - 85

【代码】每日5题Day17 - LeetCode 81 - 85。

alimamaalala的博客 424

day74【代码随想录】二刷链表

1、重排链表2、旋转链表3、删除排序链表中的重复元素 II4、重复的DNA序列。

qq_42338744的博客 345

Leetcode 81-90

LeetCode 81. 搜索旋转排序数组 II 分析 因为有重复数字的存在, 旋转后的数组第一个数 可能和最后一个数相等, 这样的话, 就不容易判断target到底属于 前半段区间, 还是后半段区间. 因此需要加个while循环, 排除重复元素, 并不影响结果的判定. 因为后一个区间的值全是小于nums[0]的, 所以可以通过二分, 找到前半段区间的右端点的值, 即>= nums[0]最靠右的值 然后让判断target是否在所找的区间内部即可. code class Solution { pub

esjiang的博客 168

Leetcode算法题【简单】83.删除排序链表中的重复元素

具体步骤请查看每个关键步骤的代码注释。

qq_40800519的博客 244
上一篇: Leetcode爬楼梯算法与分析
下一篇: Leetcode合并两个有序数组算法与分析
Maple_PI
博客等级 码龄7年 3粉丝 34原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值