题目要求:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
迭代方法:
ListNode* deleteDuplicates(ListNode* head) {
if(head == NULL)
return NULL;
ListNode* ptr = head;
while(ptr->next != NULL) {
if(ptr->val == ptr->next->val) {
ListNode* del = ptr->next;
ptr->next = del->next;
delete del;
}
else {
ptr = ptr->next;
}
}
return head;
}
递归方法:递归方法是从后往前执行,先判断最后两个结点,然后如果相等返回后一个结点,这样就不需要补NULL!
递归套路解决链表问题:1.找终止条件;2.想想应该返回什么值;3.每一步要做什么?
ListNode* deleteDuplicates(ListNode* head) {
if(!head || !head->next)
return head;
head->next = deleteDuplicates(head->next);
return (head->val == head->next->val)?head->next:head;
}