Description:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
Note:
1.由于重复的结点全要删掉,所以使用一个int变量num记录当前判断是否有重复的结点,numNode指向这个结点。当出现重复结点时,若numNode不为空,则删除他的内容,若numNode为空,则只用删除当前重复节点(nextNode)。
2.当head为要删除的结点时,重置head指针为nextNode->next并删除nextNode结点。
3.当当前结点(nextNode)不等于num值时,有两种情况:
numNode为空,则置numNode=nextNode,更新num值,nextNode后移一格。
numNode不为空,则preNode,numNode,nextNode全都后移一格,更新num值。
Code:
class Solution {
public:
/*
* @param head: head is the head of the linked list
* @return: head of the linked list
*/
ListNode * deleteDuplicates(ListNode * head) {
// write your code here
if(!head)
return nullptr;
int num=head->val;
ListNode* preNode=nullptr;
ListNode* numNode=head;
ListNode* nextNode=head->next;
while(nextNode){
if(num==nextNode->val){
if(numNode){
delete numNode;
numNode=nullptr;
}
if(preNode){
preNode->next=nextNode->next;
delete nextNode;
nextNode=preNode->next;
}
else{
head=nextNode->next;
delete nextNode;
nextNode=head;
}
}
else{
if(numNode){
preNode=numNode;
}
numNode=nextNode;
num=numNode->val;
nextNode=nextNode->next;
}
}
return head;
}
};