給定一個排序鏈表氓栈,刪除所有含有重復(fù)數(shù)字的節(jié)點(diǎn),只保留原始鏈表中 沒有重復(fù)出現(xiàn) 的數(shù)字屯远。
1 -> 2 -> 3 -> 3 -> 4 -> 4 -> 5
head p
1 -> 1 ->1 ->2 ->3
head p
從head節(jié)點(diǎn)開始蔓姚,找到下一個節(jié)點(diǎn)p,如果head節(jié)點(diǎn)的值等于p節(jié)點(diǎn)的值慨丐,那就開始循環(huán)止到p節(jié)點(diǎn)的值不等于head節(jié)點(diǎn)的值坡脐,把p節(jié)點(diǎn)賦給head節(jié)點(diǎn),遞歸調(diào)用房揭,如何head節(jié)點(diǎn)的值不等于p節(jié)點(diǎn)备闲,那就說明p節(jié)點(diǎn)是head節(jié)點(diǎn)的子節(jié)點(diǎn),直接把p節(jié)點(diǎn)賦給head的next,遞歸調(diào)用捅暴。
示例 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;
}