Given a sorted linked list, delete all duplicates such that each element appear only once.
Example 1:
Input: 1->1->2 Output: 1->2
Example 2:
Input: 1->1->2->3->3 Output: 1->2->3
这道题easy,上道题medium,两题的不同在于,上道题目删除个数大于1的元素,不保留一个;二本题相当于去重,只保留一个。 在算法上,两题的不同在于,start指向的位置,本题指向的是相同元素的第一个元素,而上题指向的是相同元素的前一个不同元素,指向的都是要删除元素的前驱。 这道题count依然指的是相同元素个数,不包含第一个元素
代码如下:
/**
* 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) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* start = head;
ListNode* end = start;
int count = 0;
while(end && end->next)
{
if(end->val == end->next->val)
{
end = end->next;
count++;
}
else
{
if(count == 0)
{
start = start->next;
end = start;
}
else
{
start->next = end->next;
end->next = NULL;
start = start->next;
end = start;
count = 0;
}
}
}
if(count > 0) start->next =NULL;
return head;
}
};