链接:力扣
/**
* 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 || !head->next) {
return head;
}
ListNode* dummy = new ListNode(-1);
dummy->next = head;
ListNode* prev = dummy;
ListNode* cur = prev->next;
while (cur && cur->next) {
// 当前节点和下一个节点数值相同
if (cur->val == cur->next->val) {
int value = cur->val;
ListNode* ite = cur->next;
// 找到不想等的数值停止
while (ite != nullptr) {
if(ite->val != value) {
break;
} else {
ite = ite->next;
}
}
// 重新建立连接
prev->next = ite;
// 更新下一个节点
cur = ite;
} else {
// 更新前一个节点
prev = cur;
// 更新变量的下一个节点
cur = cur->next;
}
}
ListNode* ret = dummy->next;
delete dummy;
return ret;
}
};
/**
* 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) {
if (!head) {
return head;
}
ListNode dummy;
dummy.next = head;
ListNode* cur = head;
ListNode* prev = &dummy;
while (cur) {
int val = cur->val;
int cnt = -1;
ListNode* tmp = cur;
while (tmp && tmp->val == val) {
tmp = tmp->next;
++cnt;
}
if (cnt >= 1) {
prev->next = tmp;
cur = tmp;
} else {
prev->next = cur;
prev = cur;
cur = cur->next;
}
}
return dummy.next;
}
};