class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode*node = head;
while(node && node->next){
if(node->next->val == node->val){
node->next = node->next->next;
}
else {
node = node->next;
}
}
return head;
}
};
递归本质就是先深入然后回退。
是从后往前操作,这个是循环难以实现的。从后往前操作的就可以考虑递归。
主体:从最后一个元素开始,元素逐渐增加,从后往前返回正常链表。链表长度逐渐增加。
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head == nullptr || head->next == nullptr) return head;//终止条件
head->next = deleteDuplicates(head->next);//逐步深入到最底层
return head->val == head->next->val? head->next:head;
}
};