题目描述
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
返回同样按升序排列的结果链表。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
C++
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
/*已经升序排列
只删重复数,保留非重复的
如果是这种情况
1 --> 1 --> 1 --> 2 --> 3
head next
1.则需要移动next直到出现与当前head.value不相等的情况(含null)
2.并且此时的head已经不能要了,因为已经head是重复的节点
递归
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
bool flag=false;
//考虑特殊情况
if(!head || !head->next) return head;
//判是否是这种情况 //1->1->1->1->2>3..... //此时head=2;
ListNode* next=head->next;
if(head->val==next->val){
while(next && head->val==next->val){
next=next->next;
}
head=deleteDuplicates(next);
}else{
head->next=deleteDuplicates(next);
}
return head;
}
};