LeetCode 82. 删除排序链表中的重复元素 II

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

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;
}

你可能感兴趣的:(LeetCode 82. 删除排序链表中的重复元素 II)