题目描述
存在一个按升序排列的链表,给你这个链表的头节点 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;
}
};
该博客讨论了如何删除已按升序排列的链表中的所有重复元素,以保持链表中没有重复的数字。提供的C++解决方案采用递归方法,首先检查头节点和其后继节点的值是否相同,如果相同,则跳过这些重复节点,直至找到不同值的节点,然后对下一个节点递归执行相同操作。最后返回处理后的链表。
1115

被折叠的 条评论
为什么被折叠?



