这题本人充分吸收了前几道链表题的经验,设了头节点、设了slow、fast双指针来协助解题,不再是单一思维的注视问题而是根据数据特点选择有效结构来帮助解题,就像做解析几何会画高质量辅助线一样。
如下:
struct ListNode *deleteDuplicates(struct ListNode *head) {
if (head == NULL)
return NULL;
struct ListNode myhead = {INT32_MAX, head};
struct ListNode *fast, *slow = &myhead, *temp;
fast = head;
while (slow->next != NULL) {
if (fast->val == slow->val) {
slow->next = fast->next;
temp = fast;
fast = fast->next;
free(temp);
}
else {
slow = fast;
fast = fast->next;
}
}
return head;
}