今日碎碎念:
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
解题分析
重复的定义是:紧邻着相同
分两种情况处理:1.开头就出现重复节点,该情况是处理掉开头的重复节点后,再递归调用函数 2.开头的节点不是重复节点,即返回的头指针为开头的节点,剩下的部分递归调用函数处理。
代码实现
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
// 边界情况
if(pHead==NULL or pHead->next==NULL)
return pHead;
// 处理开始就出现的重复结点,并递归调用处理
if (pHead->val == pHead->next->val) {
ListNode* p = pHead;
while(pHead != NULL && p->val == pHead->val) {
pHead = pHead->next;
}
return deleteDuplication(pHead);
}
else {
pHead->next = deleteDuplication(pHead->next);
return pHead;
}
}
};
结果