剑指offer 删除链表中重复的结点
- 题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5
处理后为 1->2->5
。
- 题目解答
很简单的题目,但是在写代码之前一定要设想好所有情况,一定要思路清晰,否则写了还会删掉,还会修改。
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if (pHead == NULL)
return pHead;
ListNode* p = pHead;
ListNode* prior = pHead;
while (p){
bool dup = false;
while (p->next!=NULL && p->val == p->next->val){
p->next = p->next->next;
dup = true;
}
if (dup == true){
if (p == pHead){
p = p->next;
pHead = p;
prior = p;
}
else{
p = p->next;
prior->next = p;
}
}
else{
p = p->next;
if (prior->next != p)
prior = prior->next;
}
}
return pHead;
}
};