1 remove-duplicates-from-sorted-array
class Solution {
public:
int removeDuplicates(int A[], int n)
{
if(n==0)
return 0;
int index = 1;
for(int i=1; i<n;i++)
{
if(A[index-1]!=A[i])
A[index++] = A[i];
}
return index;
}
};
2 remove-duplicates-from-sorted-array-ii
class Solution {
public:
int removeDuplicates(int A[], int n) {
if(n<=2) return n;
int index=2;//允许重复两次,可以修改为三次
for(int i=2;i<n;i++)
{
if(A[i]!=A[index-2])//允许重复两次,可以修改为三次
{A[index]=A[i];
index++;
}
}
return index;
}
};
3 remove-duplicates-from-sorted-list
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head)
{
if(head == nullptr)
return nullptr;
ListNode* node = head;
ListNode* last = head;
while(last)
{
while(last->next != nullptr && last->val == last->next->val)
{
last = last->next;
}
node->next = last->next;
last = last->next;
node = last;
}
return head;
}
};
4 remove-duplicates-from-sorted-list-ii
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
if (head == NULL || head->next == NULL) return head;
ListNode* head1 = new ListNode(INT_MIN);
head1->next = head;
ListNode* p = head1;
ListNode* q = head1->next;
while(q) {
while(q->next && q->next->val == q->val) q = q->next;
if(p->next != q) {
//ListNode* tmp = q->next;
// q->next = NULL; //将重复结点断开
p->next = q->next;
q = q->next;
}
else {
p = q;
q = q->next;
}
}
return head1->next;
}
};