给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5 输出: 1->2->5
示例 2:
输入: 1->1->1->2->3 输出: 2->3
这个题目是要删除所有重复出现过的元素,可以用O(n^2)比较删除法,代码比较复杂,这里用O(n)的Map方法实现
/**
* 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)
{
unordered_map<int,int> mp;
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* current=dummy;
ListNode* temp;
while(current->next)
{
if(mp.find(current->next->val)==mp.end())
{
mp[current->next->val] = 0;
}
else
{
mp[current->next->val]++;
}
current=current->next;
}
current = dummy;
while(current->next)
{
if(mp[current->next->val]>0)
{
temp = current->next;
current->next=temp->next;
delete temp;
}
else
{
current=current->next;
}
}
return dummy->next;
}
};