给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5 输出: 1->2->5
示例 2:
输入: 1->1->1->2->3 输出: 2->3
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head){
struct ListNode* tmp_head=NULL;
struct ListNode* tmp=NULL;
struct ListNode* last=NULL;
bool do_delete=false;
while(head)
{
if(last)
{
if(head->val==last->val)
{
do_delete=true;
}
else
{
if(do_delete)
{
do_delete=false;
}
else
{//save
if(!tmp_head)
{
tmp_head=last;
tmp=last;
}
else
{
tmp->next=last;
tmp=tmp->next;
}
}
}
}
last=head;
head=head->next;
}
if(!do_delete)
{
if(!tmp_head)
{
tmp_head=last;
}
else
{
tmp->next=last;
}
}
else
{
if(tmp)tmp->next=NULL;
}
return tmp_head;
}
执行用时 : 8 ms, 在Remove Duplicates from Sorted List II的C提交中击败了98.17% 的用户
内存消耗 : 7.4 MB, 在Remove Duplicates from Sorted List II的C提交中击败了96.81% 的用户