删除单链表中的某个结点只需要将指针绕过它,指向它的下一个结点即可。
从链表的头指针开始遍历,分为两种情况:
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; } };