トピックの説明
ソートされたリンク リストに重複ノードがあります。リンク リスト内の重複ノードを削除してください。重複ノードは保持されず、リンク リスト ヘッド ポインタを返します。たとえば、リンクされたリスト 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 *pPreHead = new ListNode(0), *p = pHead, *pPre = pPreHead, *tp;
pPreHead->next = pHead;
while (p != nullptr && p->next != nullptr)
{
if (p->val == p->next->val)
{
int d = p->val;
while (p != nullptr && p->val == d)
{
tp = p;
pPre->next = p->next;
p = p->next;
delete tp;
}
}
else
{
pPre = p;
p = p->next;
}
}
p = pPreHead->next;
delete pPreHead;
return p;
}
};