剑指Offer:56-删除链表中重复的结点

题目描述

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

思路

实现1-递归删除

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
    {
        //递归退出条件,节点为空,或者只有一个节点
        if(!pHead || !pHead->next)
            return pHead;
        int val = pHead->val;
        if(pHead->next->val != val)
        {
            pHead->next = deleteDuplication(pHead->next);
            return pHead;
        }
        else
        {
            while(pHead->next && pHead->next->val == val)
                pHead = pHead->next;
            return deleteDuplication(pHead->next);
        }
    }
};

你可能感兴趣的:(剑指Offer:56-删除链表中重复的结点)