题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead == NULL)
return pHead;
map<int,int> counts;
ListNode* nNode = pHead;
while(nNode != NULL){
counts[nNode->val] ++;
nNode = nNode->next;
}
ListNode* newHead = (ListNode *)malloc(sizeof(ListNode));
newHead->next = pHead;
nNode = newHead;
while(nNode->next != NULL){
if(counts[nNode->next->val]>1){
nNode->next = nNode->next->next;
}
else{
nNode = nNode->next;
}
}
//nNode->next = NULL;
return newHead->next;
}
};
每个链表值只出现一次
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead == NULL)
return pHead;
map<int,int> counts;
ListNode* nNode = pHead;
counts[nNode->val]++;
while(nNode->next != NULL){
counts[nNode->next->val] ++;
//如果下一个结点重复了
while(counts[nNode->next->val] > 1){
counts[nNode->next->val] --;
nNode->next = nNode->next->next;
if(nNode->next != NULL)
counts[nNode->next->val] ++;
else{
return pHead;
}
}
nNode = nNode->next;
}
nNode->next = NULL;
return pHead;
}
};