当前位置: 首页 > news >正文

【LeetCode算法】第83题:删除排序链表中的重复元素

目录

一、题目描述

二、初次解答

三、官方解法

四、总结


一、题目描述

二、初次解答

1. 思路:双指针法,只需遍历一遍。使用low指向前面的元素,high用于查找low后面与low不同内容的节点。将具有不同内容的节点链接在low后面,实现重复元素的删除。

2. 代码:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* deleteDuplicates(struct ListNode* head) {if(!head)return NULL;struct ListNode* low=head, *high=head;for(;high;high=high->next){if(high->val!=low->val){low->next=high;low=high;}}low->next=NULL;return head;
}

3. 优点:若存在多个连续重复的节点,提高了删除的效率,个人感觉在这种场景下是比官方的单指针遍历方法要快的。

4. 缺点:对于重复元素较少的链表,会给low重复赋值,因此在这种场景下会降低效率。

三、官方解法 

1. 思路:单指针遍历。使用单个指针来遍历链表,将当前指向节点的内容与下一个节点的内容作比较,若相等则删除下一个节点。

2. 代码:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* deleteDuplicates(struct ListNode* head) {if(!head)return NULL;struct ListNode* cur=head;while(cur->next){if(cur->val==cur->next->val){cur->next=cur->next->next;}else{cur=cur->next;}}return head;
}

3. 优点:对于重复元素较少的链表,单个指针会直接往后走不会执行其他操作,因此这种场景下效率高。(对应上述双指针法的缺点)

4. 缺点:若存在多个连续重复的节点,删除节点的效率不如双指针法。(对应上述双指针法的优点)

四、总结

删除有序链表的重复节点,可以使用双指针法或单指针法。

相关文章:

  • 一文搞透常见的Python编码陷阱(上)(分析+案例)
  • 如何判断一个对象是否已经被回收?
  • C++ 常用UI库
  • 如何消除*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS。如何消除函数未使用的警告
  • HTTPS能否避免流量劫持?如何实现HTTPS
  • 正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-24.1,2 SPI驱动实验-SPI协议介绍
  • 【软件测试】bug篇|软件测试的生命周期|描述bug的要素|bug的级别|bug的生命周期|高频面试题:与开发产⽣争执怎么处理
  • SSL VPN
  • C++系列-定位new表达式(placement-new)
  • 一个程序员的牢狱生涯(40)好事
  • 谈谈BlueStore的BitmapAllocator
  • D - New Friends(AtCoder Beginner Contest 350)
  • 海外仓快递系统哪个好?教你快速选到适合自己的管理系统
  • # linux 中使用 visudo 命令,怎么保存退出?
  • 【网络】高级IO(select||poll||epoll)
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • Android 控件背景颜色处理
  • CentOS7 安装JDK
  • Docker下部署自己的LNMP工作环境
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Map集合、散列表、红黑树介绍
  • PHP的类修饰符与访问修饰符
  • Unix命令
  • vue中实现单选
  • windows下mongoDB的环境配置
  • XForms - 更强大的Form
  • yii2中session跨域名的问题
  • 爱情 北京女病人
  • 多线程事务回滚
  • 工程优化暨babel升级小记
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​字​节​一​面​
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • # C++之functional库用法整理
  • # centos7下FFmpeg环境部署记录
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • %@ page import=%的用法
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (0)Nginx 功能特性
  • (152)时序收敛--->(02)时序收敛二
  • (3)llvm ir转换过程
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (C11) 泛型表达式
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (八)c52学习之旅-中断实验
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)Sublime Text3配置Lua运行环境
  • (转)项目管理杂谈-我所期望的新人