//递归求解 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;//每次返回的都是头 } } };