前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图解 LeetCode 链表: 82. Remove Duplicates from Sorted List II

图解 LeetCode 链表: 82. Remove Duplicates from Sorted List II

作者头像
用户2932962
发布2019-07-27 17:55:47
7370
发布2019-07-27 17:55:47
举报
文章被收录于专栏:程序员维他命程序员维他命

今天是 LeetCode 算法的 第 1 阶段第 2 天 ,这一阶段主要学习链表相关的算法题和链表数据结构。这道题是上一道的升级版。

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. Example 1:Input: 1->2->3->3->4->4->5 Output: 1->2->5 Example 2:Input: 1->1->1->2->3 Output: 2->3 LeetCode

分析

移除链表中出现过多次的节点,解这道题的思路也是「水管思路」,对水管进行拆分,重组。链表中可能出现多个重复节点,需要把这些重复的节点全部干掉。列表 L1 = 1-> 1-> 2 中第 1 个节点和第 2 个节点重复,移除,把第 3 个节点接到根节点的后面:

列表 L1 = 1-> 1-> 1 中所有节点重复,需要都移除:

代码

因为链表是有序的,重复的节点可能有多个,只有当前节点即不等于上一个节点也不等于下一个节点的值,才不重复,所以遍历的时候需要记住上一个重复的节点。C++ 实现如下:

结果

Runtime: 8 ms, faster than 100.00% of C++ online submissions for Remove Duplicates from Sorted List II. Memory Usage: 9.3 MB, less than 13.11% of C++ online submissions for Remove Duplicates from Sorted List II.

总结

如果把链表换成数组,你是不是就觉得非常简单了呢?由于单链表不能直接获取某个节点的上一个节点,所以我们创建了一个节点用来记录上一个节点,避免多次遍历。

下一道题目留给你思考:

21. Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. Example: Input: 1->2->4, 1->3->4 Output: 1->1->2->3->4->4 LeetCode

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员维他命 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档