3756. 筛选链表
一个单链表中有 m
个结点,每个结点上的元素的绝对值不超过 n
。
现在,对于链表中元素的绝对值相等的结点,仅保留第一次出现的结点而删除其余绝对值相等的结点。
请输出筛选后的新链表。
例如,单链表 21 -> -15 -> -15 -> -7 -> 15
,在进行筛选和删除后,变为 21 -> -15 -> -7
。
输入样例:
输入:21->-15->-15->-7->15
输出:21->-15->-7
数据范围
1≤m≤1000
,
1≤n≤10000
代码实现:
/**
* 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[10001]={};
auto p=head;
st[abs(p->val)]=true;
while(p->next){
int x=abs(p->next->val);
if(st[x]){
auto q=p->next;
p->next=q->next;
delete q;
}else{
p=p->next;
st[x]=true;
}
}
return head;
}
};