- 删除排序链表中的重复元素 II
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
返回同样按升序排列的结果链表。
/**
* 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 == nullptr) {
return nullptr;
}
int pre = INT_MAX;
ListNode *preNode = nullptr;
ListNode *start = head;
while (start) {
ListNode *temp = start->next;
if (temp == nullptr) {
return head;
}
// cout << start->val << ends << temp->val << endl;
bool flag = false;
while (temp != nullptr && temp->val == start->val) {
// if (temp)
// cout << "test" << temp->val << ends << start->val << endl;
temp = temp->next;
flag = true;
if (temp == nullptr) {
break;
}
}
// cout << temp->val << endl;
if (flag) {
if (preNode == nullptr) {
if (temp == nullptr) { //到达最后的位置
return nullptr;
} else {
start = temp;
head = start;
}
} else {
if (temp == nullptr) { //到达最后直接让前一个赋值为0
preNode->next = nullptr;
return head;
} else {
start = temp;
preNode->next = start;
}
}
} else {
preNode = start;
start = start->next;
}
}
return head;
}
};