设计一种方法,从无序链表中删除重复项。
样例
样例 1:
输入:1->2->1->3->3->5->6->3->null
输出:1->2->3->5->6->null
样例 2:
输入:2->2->2->2->2->null
输出:2->null
挑战
如果没有临时缓冲区,如何解决这一问题?
/**
* Definition of singly-linked-list:
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: The first node of linked list.
* @return: Head node.
*/
ListNode * removeDuplicates(ListNode * head)
{
// write your code here
vector<int> buffer;
ListNode* ret = NULL;
if(head == NULL)
return ret;
ListNode* tail = NULL;
while(head)
{
ListNode* next = head->next;
int i = 0;
for( ; i < buffer.size(); i++)
{
if(head->val == buffer[i])
break;
}
if(i == buffer.size())
{
buffer.push_back(head->val);
if(ret == NULL)
{
ret = head;
tail = head;
tail->next = NULL;
}
else
{
tail->next = head;
tail = head;
tail->next = NULL;
}
}
head = next;
}
return ret;
}
};