问题描述
给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
示例1:
输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]
示例2:
输入:head = [1,1,1,2,3]
输出:[2,3]
解题思路
这道题和83. 删除排序链表中的重复元素不一样的是,不保留重复元素,重复元素全部删除。
所以,如果所有元素全部相同,最终返回的链表可能是空。
对于这种问题,可以构造一个哑节点指向链表头节点;
由于这道题是删除所有重复元素,所以遍历的区间必然至少有两个元素才可能有重复元素;
假设当前遍历区间cur到尾节点,那么必然循环的条件是cur->next和cur->next->next都不等于空;
在具体的每次循环中:
如果cur->next和cur->next->next的值相等,那么说明至少有两个重复元素,那么逐个删除即可,直到cur->next不再是重复元素;
如果cur->next和cur->next->next的值不想等,那么说明cur->next节点指向的值不存在重复节点,直接移动到下一个节点即可;
代码实现
/**
* Def