ListNode *deleteDuplicates(ListNode *head)
{
if(head == NULL) //如果头结点为空,则返回
return NULL;
ListNode* pPreNode = NULL;
ListNode* pNode = head;
while(pNode != NULL){
ListNode* pNext = pNode->next;
bool needDelete = false;
if(pNext != NULL && pNext->val == pNode->val) //若当前节点相同则说明需要删除,标记出来
needDelete = true;
if(!needDelete){ //如果头结点不需要删除,则继续
pPreNode = pNode;
pNode = pNode->next;
}
else{
int value = pNode->val;
ListNode* pToBeDel = pNode;
while(pToBeDel != NULL && pToBeDel->val == value){ //判断重复节点并删除
pNext = pToBeDel->next;
delete pToBeDel;
pToBeDel = NULL;
pToBeDel = pNext;
}
if(pPreNode == NULL) //如果头结点删除了则重新赋值头结点
head = pNext;
else
pPreNode->next = pNext;
pNode = pNext;
}
}
return head;
}
删除重复节点
最新推荐文章于 2020-12-18 18:45:16 发布