您的位置:首页 > 其它

Leetcode 删除重复的链表元素

2013-05-30 10:52 423 查看
给定一个链表,其中可能包含重复的元素,比如1->2->2->3->4

第一题:删除多余的重复的元素: 也就是得到1->2->3->4

第二题:删除所有的重复的元素:1->3->4

结构体和函数声明如下:

typedef struct Node
{
int val;
ListNode * next;
} *ListNode
ListNode * removeDuplicates(ListNode * head)


第一题:

{
if(head == NULL) return NULL;
ListNode * cur1 = head;
ListNode * cur2 = head;
while(cur2 != NULL)
{
int val = cur1->val;
while(cur2 && cur2->val == cur1->val)
{
cur2 = cur2 ->next;
}
cur1->next = cur2;
cur1 = cur1->next;
}
return head;
}


第二题:
感觉第二个比较有趣,要考虑的情况也多一点,关键是找到distinct value,并且加入到新的链表中去

{
ListNode *pre = head, *cur = head,*dummy,*tail;
dummy = new ListNode();
tail = dummy;
while(cur != NULL && cur->next != NULL)
{
//如果遇到相等的元素,就不断的向后移动
while(cur->next != NULL && cur->val == cur->next->val) cur = cur->next;
// distinct value,加入到新的链表中去
if(pre == cur)
{
tail->next = pre;
tail = tail->next;
}
pre = cur->next;
cur = cur->next;
}
tail -> next = cur;
return dummy->next;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐