链表 排序链表删除重复节点

给定一个排序的链表中,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。

思路:采用递归的思想

  • 如果当前的节点是重复节点,那么一直后移到不重复处,返回此后序列的递归调用值(也就是后部分处理后的表头)
  • 如果当前节点不是重复节点,那么勾连 后序列的递归调用,返回当前节点
class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
    {
        //只有一个节点 或为空情况  也是递归返回点
        if(pHead==NULL || pHead->next==NULL)
            return pHead;
        
        if(pHead->val==pHead->next->val) //重复节点
        {
            ListNode* p=pHead->next;
            //直到第一个不重复位置
            while(p && p->val==pHead->val)
                p=p->next;
            return deleteDuplication(p);//返回此后部分链表的递归调用
            
        }
        else
        {
           pHead->next=deleteDuplication(pHead->next);//完成勾连
            return pHead; //否则返回pHead
        }
  

    }
};

猜你喜欢

转载自blog.csdn.net/qq_33369979/article/details/88546640