删除单链表中的某个结点只需要将指针绕过它,指向它的下一个结点即可。

从链表的头指针开始遍历,分为两种情况:

1、当前指针(pnode)与下一个指针(pnode->next)的值不同,当前指针移动到下一个指针(pnode = pnode->next);

2、当前指针与下一个指针的值相同,则将当前指针指向它的下下个指针(pnode->next = pnode->next->next)。

直到遍历完整个链表,就删除了链表中重复的元素。

时间复杂度:o(n)

空间复杂度:0(1)

class Solution {
  public:
    ListNode* deleteDuplicates(ListNode* head) {
	  	//特殊情况处理
        if (head == nullptr || head->next == nullptr)
            return head;

        ListNode* pnode = head;

        while (pnode->next != nullptr) {
            if (pnode->val != pnode->next->val) {
                pnode = pnode->next;
            } else {
                pnode->next = pnode->next->next;
            }
        }
        return head;
    }
};