关注我,分享高质量每日一题题解~
b站同名账号分享力扣杯历届真题视频题解,也欢迎大家提出宝贵意见!
思路:哈希表
- 只有当前结点值的绝对值是第一次出现,我们才将其加入结果链表中,所以可以利用哈希表记录值的出现次数。
- 特别地,由于最后一个加入结果链表的结点不一定是原链表中的最后一个结点,所以在遍历结束后,要将最后一个加入结果链表的结点的 $next$ 指针置为空,防止不满足条件的结点被引入结果链表。
代码(C++)
class Solution {
public:
ListNode* filterList(ListNode* head) {
map<int, int> mp;
// 哑结点,一般用于结果链表头结点的上一个结点
ListNode* dummyHead = new ListNode(-1);
// 从哑结点开始,维护结果链表尾部的结点
ListNode* h = dummyHead;
while(head) {
if(!mp.count(abs(head->val))) {
mp[abs(head->val)] = 1;
h->next = head;
h = h->next;
}
head = head->next;
}
h->next = nullptr; // 置空
return dummyHead->next;
}
};