原题目连接
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
struct ListNode* deleteDuplicates(struct ListNode* head) {
typedef struct ListNode list;
if(head==NULL)
{
return head;
}
list* pre=NULL;
list*cur = head;
while(cur)
{
if(cur->next!=NULL&&cur->next->val == cur->val)
{
while(cur->next!=NULL&&cur->next->val == cur->val)
{
cur = cur->next;//cur第一类移位:重复串移位,从重复串第一个元素到重复串最后一个元素
}
if(pre==NULL)//说明pre还没有开始指向,也就是链表一开始就有重复的元素
{
head = cur->next;//得到链表头
}
else
{
pre->next = cur->next;
}
}
else
{
pre = cur;//得到新前驱(当前遍历的结点的前一个结点)
}
cur = cur->next;//cur第二类移位,正常移位
}
return head;
}
```c