菜鸡每日一题系列打卡82

每天一道算法题目

小伙伴们一起留言打卡

坚持就是胜利,我们一起努力!

题目描述(引自LeetCode)

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。

示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3

题目分析

这是一道链表的操作题目,在之前的题目中,菜鸡曾不止一次地提起过,链表是一种递归定义的数据结构,关于链表的操作题目,可以考虑采用递归法和迭代法两种方法进行实现。

有关链表操作的题目着实非常重要,也是面试过程中考查的热点,菜鸡在本文中将会采用两种方式进行实现,话不多说,上代码!

代码实现

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
// 递归
class Solution {private ListNode tmp = null;public ListNode deleteDuplicates(ListNode head) {if (head==null || head.next==null) return head;ListNode node = deleteDuplicates(head.next);if (tmp == null) tmp = node;if (tmp.val == head.val) {return tmp.next;} else {head.next = node;tmp = head;return head;}}}
// 迭代
class Solution {public ListNode deleteDuplicates(ListNode head) {if (head==null || head.next==null) return head;ListNode dummy = new ListNode(-1);dummy.next = head;ListNode low = dummy, fast = head.next;while (fast != null) {if (low.next.val != fast.val) {low = low.next;fast = fast.next;} else {while (fast != null && low.next.val == fast.val) fast = fast.next;low.next = fast;if (fast != null) fast = fast.next;}}return dummy.next;}}

代码分析

对代码进行分析:

  • 在递归法的实现中,程序依然需要访问链表的所有结点,时间复杂度为O(n),由于递归调用需要额外的空间,空间复杂度为O(n)

  • 在迭代法的实现中,程序对链表进行了遍历,时间复杂度为O(n),仅仅使用了常数级别的额外空间,因此,空间复杂度为O(1)

执行结果

递归法的执行结果

迭代法的执行结果

注意!不要被执行结果中内存消耗差异蒙蔽了双眼,进而怀疑对复杂度的分析是否正确,事实上,在测试数据集规模不够的时候,执行结果的细微差异并不能说明问题。

学习 | 工作 | 分享

????长按关注“有理想的菜鸡

只有你想不到,没有你学不到

每日一题——删除排序链表中的重复项 II相关推荐

  1. leetcode算法题--删除排序链表中的重复元素 II

    原题链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/ 1.map ListNode* deleteD ...

  2. list元素求和_LeetCode刷题实战82:删除排序链表中的重复元素 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  3. 算法---删除排序链表中的重复元素 II

    删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 .返回 已排序的链表 . 输入:head = [1,2,3,3,4,4,5] ...

  4. Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历

    Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...

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

    82. 删除排序链表中的重复元素 II 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字. 返回同样按升序排 ...

  6. Leecode刷题【1数组专题4】80. 删除排序数组中的重复项II (以及通用解法)

    Leecode刷题 [1数组专题4]80. 删除排序数组中的重复项II (以及通用解法) 题目: 思路 双指针法: (错误代码) 正解: 通用解法: 题目: 给你一个有序数组 nums ,请你 原地 ...

  7. vue删除数组中的一条数据_删除排序数组中的重复项 II

    删除排序数组中的重复项 II题目 给定一个增序排列数组 nums ,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改 ...

  8. 80. 删除排序数组中的重复项 II golang

    80. 删除排序数组中的重复项 II 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O ...

  9. LeetCode题组:第26题-删除排序数组中的重复项

    1.题目:删除排序数组中的重复项 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度.(注意这里提到了排序数组,也就是说数组是有序的.如果无序,我们又 ...

最新文章

  1. 上海市国资大数据课题启动仪式暨数据资产技术及金融行业应用沙龙隆重开
  2. scrapy中的下载器中间件
  3. 一起学习手撕包菜如何做 - 生活至上,美容至尚!
  4. 判断是否是闰年的方法,很简单噢
  5. echarts迁徙图 vue_【可视化插件】Vue项目中Echarts流向图迁徙图实现
  6. 测速源码_解密,相亲交友直播系统源码,高并发如何做到不卡顿
  7. java 32 64 性能,Java 64位的性能是否优于32位版本?
  8. 项目管理团队建设成功经验
  9. FIR滤波器和IIR滤波器
  10. Git超详解七 储藏 (看不懂算我输)
  11. z-buffer算法
  12. 深圳湾口岸过关进入香港的交通方法
  13. 用matlab实现运筹学最短路问题,运筹学最短路问题实验报告
  14. 大二Web课程设计期末考试——基于HTML+CSS+JavaScript+jQuery电商类化妆品购物商城
  15. MATLAB显示:由于未找到因为输出,无法播放音频
  16. DC-DC升压降压变换原理
  17. python语言是非跨平台语言_Python语言初探【转载】
  18. rst 语法+简明教程
  19. 正则表达式教程及练习
  20. 经验之谈-关于实际项目微前端优化

热门文章

  1. 中国石油大学《 电工电子学(含模拟实验)》第一阶段在线作业
  2. 关于计算机实践创新的名言,创新与实践的名言名句
  3. 蓝天学校计算机教学反思,高中语文教学反思
  4. 安装完QQ必须要删除掉的几个恐怖文件
  5. ie浏览器的兼容性问题总结
  6. 一文解决,oracle显示ORA-01017
  7. java+MySQL 基于ssm的网上书店图书商城
  8. [深度学习从入门到女装]keras实战-Unet3d(BRAST2015)
  9. HTML垂直居中布局
  10. 怎样测试mysql最大并发量_如何测试一台服务器的最大并发量?