给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
示例 1:
输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]
示例 2:
输入:head = [1,1,1,2,3]
输出:[2,3]
提示:
链表中节点数目在范围 [0, 300] 内
-100 <= Node.val <= 100
题目数据保证链表已经按升序 排列
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路及代码如下:
public ListNode deleteDuplicates2(ListNode head) { ListNode pre = new ListNode(-1); pre.next=head; //将pre暂时存储起来,方便之后返回 ListNode last = pre; ListNode temp = head; ListNode cur = head; //定义一个flag,如果为false则说明相邻两个结点不重复 //如果是true则表示相邻两个结点为重复,要删除 boolean flag = false; while(cur!=null){ //进行判断是否重复之前应该将cur指向下一个结点 if(cur==temp){ cur = cur.next; }else { //如果重复,一直找到不重复的地方 while (cur != null && temp.val == cur.val) { cur = cur.next; flag = true; } if(flag){ //需要删除 pre.next = cur; }else { pre = pre.next; } temp = cur; //进行下一轮删除之前要把flag置为false flag = false; } } return last.next; }