题目:83. 删除排序链表中的重复元素 - 力扣(LeetCode)
题解
代码
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head == nullptr) return head;
ListNode* left = head;
ListNode* cur = head->next;
while(cur)
{
if(cur->val != left->val)
{
cur = cur->next;
left = left->next;
}
else
{
// 注意可能找到最后都没有找到不同值的节点
while(cur && cur->val == left->val)
{
cur = cur->next;
}
// 删除多余的重复节点
ListNode* del = left->next;
while(del != cur)
{
ListNode* next = del->next;
delete del;
del = next;
}
left->next = cur;
}
}
return head;
}
};
题目:82. 删除排序链表中的重复元素 II - 力扣(LeetCode)
题解
代码
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head == nullptr) return head;
ListNode* left = head;
ListNode* cur = head->next;
ListNode* prev = nullptr;
while(cur)
{
if(cur->val != left->val)
{
cur = cur->next;
prev = left;
left = left->next;
}
else
{
while(cur && cur->val == left->val)
{
cur = cur->next;
}
// 去重
ListNode* del = left;
while(del != cur)
{
ListNode* next = del->next;
delete del;
del = next;
}
// 与上一题不同点 去重过后需要显示的处理以下
// 因为涉及到prev节点
if(prev) prev->next = cur;
else head = cur;
if(prev) left = prev->next;
else left = head;
// 可能链表删空了
if(left) cur = left->next;
else cur = nullptr;
}
}
return head;
}
};