存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
返回同样按升序排列的结果链表。
输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]
输入:head = [1,1,1,2,3]
输出:[2,3]
链表中节点数目在范围 [0, 300] 内
-100 <= Node.val <= 100
题目数据保证链表已经按升序排列
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii
解法一:
public ListNode deleteDuplicates(ListNode head) {
if(head==null) return head;
ListNode dummyHead=new ListNode(-999);
dummyHead.next=head;
ListNode fast=null;
ListNode cur=dummyHead;
ListNode pre=dummyHead;
while (cur!=null&&cur.next!=null)
{
if(cur.val==cur.next.val)
{
fast=cur;
while ((fast.next!=null)&&(fast.val== fast.next.val))
{
fast=fast.next;
}
pre.next=fast.next;
cur=pre;
}
pre=cur;
cur=cur.next;
}
return dummyHead.next;
}
public ListNode deleteDuplicates(ListNode head) {
if(head==null||head.next==null)
return head;
if(head.next.val!=head.val)
{
head.next=deleteDuplicates(head.next);
}else {
ListNode move=head.next;
while (move!=null&&move.val==head.val)
{
move=move.next;
}
return deleteDuplicates(move);
}
return head;
}