给定一个链表,无序的,去除其中重复的数字后返回。
solution1:哈希表法:建立一个哈希表,遍历链表的节点,哈希表中已经存在该节点的就删除,否则将其加进哈希表中。时间复杂度O(n).空间负责度O(256)
solution2:若不能申请额外的空间,即空间复杂度为0,则双层遍历链表中的节点,当前节点与已经遍历过的节点之前的链表比较。若相等就删除否则继续往下遍历。
第一种方法的代码:
class solution{
public:
ListNode * DeleteDuplicates(ListNode * head)
{
ListNode *pre=NULL, * cur=head;
int m[256]={0};
while(cur)
{
if(m[cur->val]>0)
pre->next=cur->next;
else
{pre=cur;
cur=cur->next;
}
}
return head;
}
};
第二种方法的代码:
class solution{
public:
ListNode * DeleteDuplicates(ListNode * head)
{
ListNode * com=head, *cur=head;
while(com)
{ cur=com->next;
ListNode * pre=cur;
while(cur)
{
if(cur->val==com->val)
pre->next=cur->next;
else
{ pre=cur;
cur=cur->next; }
}
com=com->next;
}
return head;
}
};