https://leetcode-cn.com/problems/remove-duplicate-node-lcci/
思路:因为元素范围在 [ 0 , 20000 ] [0,20000] [0,20000]内,所以搞一个数组哈希存一下出现过的值即可。剩下的操作就是简单的删除单向链表的某个节点辣(当然可以暴力 O ( n 2 ) O(n^2) O(n2)搞,这样空间复杂度是 O ( 1 ) O(1) O(1)的)。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeDuplicateNodes(ListNode* head) {
if(!head)
return head;
bool vis[20001]={0};
vis[head->val]=1;
ListNode *pre=head;
ListNode *cur=pre->next;
while(cur){
if(vis[cur->val]){
pre->next=cur->next;
delete(cur);
}
else{
vis[cur->val]=1;
pre=cur;
}
cur=pre->next;
}
return head;
}
};