算法1
思路:
如何判断一个数是否出现过
用一个布尔型数组,第一个点保留,每次判断一下,下一个点是否要删
C++ 代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* filterList(ListNode* head) {
bool st[100001]={};//定义一个布尔型数组,像这种题判断一个数字是否重复出现,要么为真,要么为假,最好用bool
st[abs(head->val)]=true;//让第一个点的值为真
for(auto p=head;p->next;)//p来循环
{
int x=abs(p->next->val);
if(st[x])
{
auto q=p->next;//q为p的下一个节点,q再这里用来判断是否重复
p->next=q->next;//如果重复,删除q
delete q;
}
else
{
p=p->next;//如果不重复,p继续向后走
st[x]=true;
}
}
return head;//最后返回头结点
}
};