//递归求解 C++ 有问请指出谢谢,
//理解递归了写起来代码蛮简单,研读别人代码这个过程异常艰难耗时,所以我把思路都写出来了方便理解;
//每次递归:删除当前指针向后的连续节点。保证下一次递归的头结点与之后的不重复;找到下一个不重复的节点与其相连
class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
    {
        if (!pHead || !pHead->next) return pHead;//0/1个结点直接返回头,也是递归出口,NULL的话结束
        ListNode* cur;
        if ( pHead->next->val==pHead->val){//当前结点等于下一个
            cur=pHead->next;//cur指向下一个
            while (cur->next && cur->next->val==pHead->val)//有下一个且还想等
                cur=cur->next;//走到相等的最后一个,此节点和前面的还是相等的
            return deleteDuplication(cur->next);//递归往后第一个不相等的,NULL的话结束             
        }
        else {//此节点和下个不相等
            cur=pHead->next;//下个结点递归过去
            pHead->next=deleteDuplication(cur);//重构链表
            return pHead;//每次返回的都是头
        }    
    }
};