LeetCode 82-Remove Duplicates from Sorted List II
题干:
给定一个排序链表,删除所有重复的元素(使其不在链表中出现)。
解:
方法1:递归法
同Leetcode 83(见前文)的思想,区别是当遇到重复的时候,直接拿第一个与head不等的元素p的递归得到的头节点代替head。
ListNode *deleteDuplicates(ListNode *head){
if(!head || !head->next) return head;
if(head->val != head->next->val){
head->next = deleteDuplicates(head->next);
}
else{
ListNode* p = head->next;
while(p && head->val == p->val){
ListNode* tmp = p;
p = p->next;
delete(tmp);
}
head = deleteDuplicates(p); //区别
}
return head;
}
方法2:迭代法
注意涉及到了对链表头节点的操作,需要用dummy node。