给定一个链表,其中可能包含重复的元素,比如1->2->2->3->4
第一题:删除多余的重复的元素: 也就是得到1->2->3->4
第二题:删除所有的重复的元素:1->3->4
第一题:
第二题:
感觉第二个比较有趣,要考虑的情况也多一点,关键是找到distinct value,并且加入到新的链表中去
第一题:删除多余的重复的元素: 也就是得到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;
}
第二题:
{
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;
}