[Leetcode] Remove Duplicates from Sorted List I | II

题目一:

Given a sorted linked list, delete all duplicates such that each element appear onlyonce.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

移除重复出现的元素,因为是已经排序好的,只要考虑相邻元素之间的情况,所以不需要什么算法,直接编程

ListNode *deleteDuplicates(ListNode *head) 
{
    ListNode *x=head;

    if(x==NULL || x->next ==NULL) return head;

    ListNode *tmp=x;
    while(x->next !=NULL)
    {
        x=x->next ;
	if(tmp->val ==x ->val )
	    tmp->next =x->next ;                        //连续相同只移动next
	else tmp=x;					//不连续相同就移动之前的节点
    }
    return head;
}


题目二:

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.

这次是要删除所有重复的元素,主要思想跟上一个差不多,只是更新节点的判断和头结点处要额外考虑,代码如下:

ListNode *deleteDuplicates(ListNode *head) 
{
     ListNode *x=head;
     if(x==NULL || x->next ==NULL) return head;

     int flag=0;
     if(head->val ==head->next->val ) flag=1;        //标记头结点是否重复

     ListNode *tmp=x;
    while(x->next !=NULL)
    {
	if(x->val ==x->next->val )                   //一直是重复
	{
		x =x->next ;
		tmp->next =x->next;
	 }
	else 
	{
		x =x->next ;
		if(x->next==NULL || x->next->val !=x ->val )  //前一个不重复,且后一个也不重复
		{
			tmp->next =x;
			tmp=x;		
			if(flag==1)                           //处理头结点
			{
				head=x;
				flag=0;
			}
		}
	}
    }
    if(flag ==1) head=tmp->next ;
    return head;    
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值