删除有序链表中重复的元素
前言
今天,小编来分享一道热门的面试算法题——删除有序链表中重复的元素。
问题描述
给出一个升序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。
例如:
给出的链表为1 -> 2 -> 3 ->3 -> 4 -> 4 -> 5,返回1-> 2 -> 5.
示例
示例1
输入:{1,2,3}
返回值:{1}
示例2
输入:{}
返回值:{}
思路
- 给链表加上表头,因为可能会出现第一个节点就需要删除
- 遍历链表,每次比较相邻两个节点,如果遇到了两个相邻节点相同,则新开内循环将这一段所有的相同都遍历过去。
- 在第2步中这一连串相同的节点前的节点直接连上后续第一个不相同值的节点。
- 返回时去掉添加的表头。
注意:
- 这道题删除的是所有重复的元素,也就是说凡是有重复出现的任何数就全部删除,并不是删除至只留下一个。
- 外层循环的条件
cur.next != null && cur.next.next != null
- 内层循环的条件
cur.next != null && cur.next.val == temp
,其实内层循环条件很简单,但是一定要细心,小编第一次遇到这道题的时候就在这入了坑
代码实现
import java.util.*; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 搬码人’s Blog!
评论