Remove Duplicates from Sorted List

原题链接Remove Duplicates from Sorted List

给定一个有序链表,对于链表中所有重复元素,只保留一个,其余的都删掉

因为链表是有序的,而且所有重复节点中只需要保留一个,所以假设上一个找到的节点是prev,当前找到的节点是cur,那么只需要判断cur->val和prev->val是否相等,即可判断要不要将cur添加到结果链表中

/*** 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* prev = head;ListNode* cur = head->next;while(cur){if(cur->val != prev->val){prev->next = cur;prev = cur;}cur = cur->next;}return head;}
};

另一种方法,可以考虑

因为链表是有序的,相同的元素都集中在一起,所以只需要保留

  • 下一个节点是null的节点
  • 不重复的节点
  • 重复节点的最后一个节点

假设当前节点为cur

判断下一个节点是否是null的方法为

if(!cur->next)

判断当前节点不是重复节点或者是重复节点的最后一个节点的方法为

if(cur->val != cur->next->val)

代码如下

/*** 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* header = new ListNode(-1);header->next = head;ListNode* cur = head;ListNode* prev = header;while(cur){/* 最后一个节点或相同节点的最后一个 */if(!cur->next || cur->val != cur->next->val){prev->next = cur;prev = cur;}cur = cur->next;}head = header->next;delete header;return head;}
};

Remove Duplicates from Sorted List II

原题链接Remove Duplicates from Sorted List II

仍然是去掉重复节点,但是重复节点一个都不保留

在上面的情况中,需要保留重复节点的最后一个节点,但是这里不需要保留,根据上面的解释

if(cur->val != cur->next->val)

可以判断当前节点不是重复节点或者是重复节点的最后一个节点,所以为了抛出第二种情况,在进入条件后仍然需要再次判断

可以通过一个变量记录当前节点是否是重复节点的最后一个节点,方法是如果

if(cur->val == cur->next->val)

那么cur->next可能就是重复节点的最后一个节点,只需要在前一次记录即可

代码如下

/*** 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* header = new ListNode(-1);header->next = head;ListNode* cur = head;ListNode* prev = header;bool duplicate = false;while(cur){if(!cur->next || cur->val != cur->next->val){/* duplicate为false表示当前节点不是重复节点 */if(duplicate == false){prev->next = cur;prev = cur;}else{duplicate = false;}}else{/* 令duplicate为true表示当前节点是重复节点 */duplicate = true;}cur = cur->next;}prev->next = nullptr;head = header->next;delete header;return head;}
};

这两道题主要需要解决的是如何判断重复节点,如果需要保留一个重复节点,那么每次遇到一个新节点就添加到结果中。如果不需要保留重复节点,那么就需要增加一层判断条件,可以记录这个节点是否是重复节点

每天一道LeetCode-----移除有序链表中的重复节点相关推荐

  1. 删除单链表中的重复节点(c语言版本)

    这是一道经典的面试题,下面是我的研究和举一反三,特整理如下: 分为三种情形: (1)删除有序链表的重复节点,重复节点一个都不留 (2)删除有序链表的重复节点,重复节点只留一个 (3)删除无序链表的重复 ...

  2. 编写代码,移除未排序的链表中的重复节点

    2019独角兽企业重金招聘Python工程师标准>>> 解法一:如果不得使用临时缓冲区,该怎么解决? 要想移除链表中的重复节点,我们需要设法记录有哪些是重复的.这里只需要使用到一个简 ...

  3. Java 移除重复节点 | 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

    移除重复节点 难度简单97 编写代码,移除未排序链表中的重复节点.保留最开始出现的节点. 示例1: 输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3] 示例2: 输入:[1, 1, 1 ...

  4. 移除未排序链表中的重复节点,保留最开始出现的节点

    编写代码,移除未排序链表中的重复节点.保留最开始出现的节点. 示例1: 输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3] 示例2: 输入:[1, 1, 1, 1, 2]输出:[1, ...

  5. 删除单链表中的重复节点

    删除单链表中的重复节点 一.题目描述 已知单链表L,写一算法,删除其中的重复节点.(更好的阅读体验,请访问程序员在旅途) 二.分析解答 2.1 知识点分析 本题主要考察链表的相关知识点,其中包括:单链 ...

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

    题目描述 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 样例 示例 1:输入: 1->2->3->3->4->4->5 输 ...

  7. 删除有序链表中的重复结点

    一,问题描述 请自己构造一个简单的有序单链表,然后实现删除链表中的重复结点.比如: 二,问题分析 首先要实现一个单链表,因此需要定义一个节点类Node.其次,实现向链表中添加结点的方法(使用尾插法)a ...

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

    1. 题目 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4->5 输出 ...

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

    难度:中等 频次:77 题目:给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 .返回 已排序的链表 . 解题思路: 一次遍历 注意: 遍历时候,如果两个节点 ...

最新文章

  1. html 资源缓存,解决index.html缓存问题
  2. FPGA逻辑设计回顾(9)DDR的前世今生以及演变过程中的技术差异
  3. 微信小程序继续入坑指南
  4. 2021年石家庄七中高考成绩查询入口,石家庄市教育考试院官网2020中考查分:成绩查询入口...
  5. JavaScript深入之从原型到原型链
  6. 如何用代码编写四则运算?
  7. OA并发用户数(转)
  8. 小白Linux入门之:常用命令介绍
  9. MacBook安装git教程,git学习这一篇就够了!
  10. 数字电路基础知识——CMOS门电路 (与非门、或非、非门、OD门、传输门、三态门)
  11. HTML5新增标签--canvas之绘制你画我猜
  12. 69期-Java SE-036_MySQL-7 SQL练习 -doing
  13. java控制台输入做界面_Java控制台输入
  14. C语言编程从键盘输入n
  15. ctf练习之闯关游戏
  16. 解决人人微信商城打开商品页面加载缓慢的问题
  17. 安装centos 7
  18. Rancher 2.x 搭建及管理 Kubernetes 集群
  19. 使用苹果MAC电脑怎么旋转图片
  20. 准确进行网速测试的方法(适用于电信,联通等多种网络)

热门文章

  1. mysql profiling表_mysql8 参考手册-INFORMATION_SCHEMA PROFILING表
  2. 区间比较_表观健康儿童 HLAB27 的参考值区间建立和验证
  3. 开关和灯泡的对应关系
  4. CTreeCtrl的用法
  5. ArcGIS API for JavaScript Bookmarks(书签)
  6. spring 之 init-method InitializingBean
  7. php mysql jquery ajax 查询数据库三级联动
  8. 怎样让外界无法改变自定义view的尺寸大小
  9. Photoshop脚本指南——Hello World
  10. 《WinForm开发系列之控件篇》Item33 NotifyIcon(暂无)