问题描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
解题报告
注意点:
- 哨兵节点的设置
- 通过一个循环寻找重复的节点
实现代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
ListNode* dummy = new ListNode(-1);
dummy->next = pHead;
ListNode *tmp=dummy;
while(tmp){
ListNode* nxt = tmp->next;
while(nxt&&nxt->next&&nxt->val==nxt->next->val){
nxt = nxt->next;
}
if(tmp->next==nxt)tmp=tmp->next;
else if(nxt->next)tmp->next=nxt->next;
else tmp->next = nullptr;
}
return dummy->next;
}
};