题目:
题解:
- 迭代法:遇到重复节点直接删除即可
- 递归法:遇到重复节点覆盖就好了
代码如下:
class Solution {
public:
//题解1:迭代法
ListNode* deleteDuplicates_1(ListNode* head) {
if(!head||!head->next)return head;
ListNode* pre=head;
while(pre&&pre->next){
if(pre->val==pre->next->val){//注意这里需要删除重复节点
ListNode* del=pre->next;
pre->next=pre->next->next;
delete del;
}
else{
pre=pre->next;
}
}
return head;
}
//解法2:递归法
ListNode* deleteDuplicates(ListNode* head){
//1、递归边界
if(!head||!head->next)return head;
//2、递归:注意这里是递到最深处才回溯,删除重复节点
head->next=deleteDuplicates(head->next);
//3、递归式:递到最深处了,需要进行节点的删除了
if(head->val==head->next->val)head=head->next;//直接覆盖原节点就好了
return head;
}
};