链表 排序链表删除重复节点
给定一个排序的链表中,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
思路:采用递归的思想
- 如果当前的节点是重复节点,那么一直后移到不重复处,返回此后序列的递归调用值(也就是后部分处理后的表头)
- 如果当前节点不是重复节点,那么勾连 后序列的递归调用,返回当前节点
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
}
}
};