题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
使用三指针思路
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
// write code here
if(head==nullptr||head->next==nullptr){
return head;
}
//三指针思路,前节点,当前节点,后节点
ListNode* newList = new ListNode(-1);
newList->next = head;
ListNode* pre = newList,* cur = head,* next = head->next;
//记录出现相同值的节点
int flag = false;
// 开始迭代
while(next){
if(cur->val == next->val){
//当前节点和下一节点值相同时,下一节点迭代,并标记flag,直到出现二者不同的情况
next =next->next;
flag = true;
}else{
//二者不同时,查看flag
if(!flag){
//没有相同节点,前中后节点向后迭代
pre = cur;
cur = cur->next;
next = next->next;
}else{
//有相同节点,前结点直接指向next节点
pre->next = next;
//当前节点赋值,跳过重复节点
cur = next;
//next节点想后迭代
next = cur->next;
flag = false;
}
}
}
if(flag){
pre->next = nullptr;
}
return newList->next;
}
};