C++/代码:

class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
    {
        auto dummy = new ListNode(-1);//初始化一个节点值为-1的空节点
        dummy->next = pHead; //建立头节点(表头)
        auto p = dummy; //用两个指针,一个表示每一段的头,一个表示每一段的尾
        while(p->next){ //若不为空,则进行循环
            auto q = p->next; //p表示每一段的头部,q表示每一段的尾部
            while(q && p->next->val == q->val) q = q->next; //下一个指针不可为空
            if (p->next->next == q) p = p->next; //若这一段为1,则进行左移,写一个循环
            else p->next= q; //否则删除该片段
        }
        return dummy->next; //p,q相当于针一样,大框架不变,靠p,q两个针进行穿针引线
    }
};