题目:
注意题目要求删除原始链表中所有重复数字的节点,只留下不同的数字。
对于链表删除题目,创建一个虚拟头节点可以免去特殊情况判断。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| class Solution { public: ListNode *deleteDuplicates(ListNode *head) { if (head == nullptr) { return head; }
ListNode *virt_head = new ListNode; virt_head->next = head;
ListNode *prev = virt_head, *curr, *duplicate; int i, val;
while (prev->next != nullptr) { val = prev->next->val; curr = prev->next; for (i = 0; curr != nullptr; i++) { if (curr->val == val) { curr = curr->next; } else { break; } } if (i == 0) { break; } else if (i == 1) { prev = prev->next; continue; } else { while (prev->next != curr) { duplicate = prev->next; prev->next = duplicate->next; delete duplicate; } } } head = virt_head->next; delete virt_head; return head; } };
|