(Leetcode 82) Remove Duplicates from Sorted List II (Java)

题目:Remove Duplicates from Sorted List II

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.For example,

Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.

解题思路:


这道题和下一道题83题很相近,所不同的是,这道题只要有重复的就将其全部删除。因此,首先是删除重复的结点,只留下那个比较的结点,最后再将这个结点也删除了就可以了。这道题首先设置了一个空的头结点dummy,方便操作,不用单独对头进行处理。

具体思路看下面的代码,应该看了代码就很容易理解了。

public class Solution {
    public static ListNode deleteDuplicates(ListNode head) {
        if( head == null || head.next == null ){
			return head;
		}
		//设置了一个空的头结点dummy,方便操作,不用单独对头进行处理
		ListNode dummy  = new ListNode(-1);
		dummy.next = head;
		//pre结点始终保持在p之前,为的是有重复的话可以删除p结点
        ListNode pre = dummy, p = head, q = p.next;
        boolean flag = false;   //设置一个flag,标记如果有重复的且执行了删除动作之后设置flag为true
        while( q != null ){
        	if( p.val == q.val ){
        		q = q.next;
        		p.next = q;
        		flag = true;
        	}
        	else{    //等删除完重复的结点之后判断是否执行了删除动作
        	    if( flag == true ){    //如果执行了删除动作则将此时正在指向重复结点的p删除
        	        pre.next = q;
        	        flag = false;   //再将flag设置回去为false
        	    }
				else{
				    pre = p;
				}
				p = q;
            	q = q.next;
        	}
        	//这个判断是处理如果最后一个结点也是重复的话删除最后一个结点
        	if( q == null && flag == true ){  
        		pre.next = q;
				//此时也应该像上面一样将flag设置回去为false,不过因为链表结束了
				//不用再设置了
        	}
        }
        //System.out.println(pre.val);
        return dummy.next;
    }
}


以上就是这道题的解法,耗时1ms。如果觉得不错,可以顶一下,支持一下,谢谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值