给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
1 -> 2 -> 3 -> 3 -> 4 -> 4 -> 5
head p
1 -> 1 ->1 ->2 ->3
head p
从head节点开始,找到下一个节点p,如果head节点的值等于p节点的值,那就开始循环止到p节点的值不等于head节点的值,把p节点赋给head节点,递归调用,如何head节点的值不等于p节点,那就说明p节点是head节点的子节点,直接把p节点赋给head的next,递归调用。
示例 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){
if(head == NULL || head->next == NULL){
return head;
}
struct ListNode * p = head->next;
if(head->val == p->val){
while(p!=NULL && head->val == p->val){
p=p->next;
}
head = deleteDuplicates(p);
}else{
head->next = deleteDuplicates(p);
}
return head;
}