【剑指offer-解题系列(57)】删除链表中重复的节点

来源:互联网 发布:黑产数据交易平台 编辑:程序博客网 时间:2024/05/21 22:21

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

分析

采用递归可以简单实现,每次判断前后两个节点是否一样,然后循环删除前一个节点。

代码实现 

    ListNode* deleteDuplication(ListNode* h)

    {
        if(!h || !h->next)
            return h; 
        
        if(h->val != h->next->val){
            h->next = deleteDuplication(h->next);
            return h;
        }
        
        ListNode* p ;
        
        while(h->next && h->next->val == h->val){
            p=h->next->next;
            ListNode* q = h;
            h=h->next; 
            free(q); 
        } 
        free(h);
        
        return deleteDuplication(p);
    }
原创粉丝点击