Название Описание
Учитывая отсортированный список, удалить все узлы содержат повторяющиеся цифры, оставляя только цифровой первоначальный список не повторяющимся.
Пример:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
Тема ссылка : https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/
, прежде чем делать эту проблему, вы можете сделать сначала удалить сортирует список повторяющихся элементов , решение проблемы .
мышление
Это вопрос по теме «доказать безопасность предложения». Нам нужно сохранить три указателя: текущий curNode узла, текущий узел перед узлом preNode, следующий узел NextNode текущего узла. Поскольку все в списке может быть повторен элемент, поэтому после удаления список пуст, необходимо построить новую точку головы к исходной голове головки узла узла newHead. Во-первых newHead назначен preNode, глава назначен curNode, head-> следующая назначенный NextNode, и определяет curNode-> Val и nextNode-> Вал равно, если они равны, чтобы проиллюстрировать нашли повторяющиеся элементы, затем перешел к NextNode curNode-> первый узел отличается вал, а затем обновляет указатель, если curNode различных NextNode Вала, указатель обновляется. Обратите внимание, что в обоих случаях (если есть повторяющиеся элементы) другим способом, чтобы обновить указатели, см специальные коды:
/**
* 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* newHead = new ListNode(0);
newHead->next = head;
ListNode* preNode = newHead;
ListNode* curNode = head;
ListNode* nextNode = curNode->next;
while(nextNode!=nullptr){
bool findRepeat = false; // 是否找到重复节点
while(curNode!=nullptr && nextNode!=nullptr && curNode->val==nextNode->val){
nextNode = nextNode->next;
flag = true;
}
if(findRepeat){ //找到重复节点
curNode = nextNode;
preNode->next = curNode;
}else{ // 没找到重复节点
preNode = curNode;
curNode = nextNode;
}
if(nextNode!=nullptr){ // 更新nextNode
nextNode=nextNode->next;
}
}
return newHead->next;
}
};