题目:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 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) {
typedef struct ListNode ListNode;
ListNode *first = (ListNode *)malloc(sizeof(ListNode));
ListNode *pre = first;
pre->next = head;
ListNode *cur = head;
ListNode *tmp = NULL;
while(pre->next)
{
while(cur->next && cur->next->val == cur->val)
{
tmp = cur;//释放
cur = cur->next;
free(tmp);
}
if(pre->next == cur)
{
pre = pre->next;
}
else
{
tmp = cur;
pre->next = cur->next;
free(tmp);
}
cur = pre->next;
}
return first->next;
}