编写代码,移除未排序链表中的重复节点。保留最开始出现的节点;
示例:
输入:[1,2,3,3,2,1]
输出:[1,2,3]
分析: 使用辅助哈希表来判断当前链表上的点是否已经在之前的链表上存在过,如果没有存在,则将该链表的节点添加在新的链表的节点上。此时注意要将这个链表节点值添加在哈希表上,为了方便下一次判断。如果存在了,则不用添加;
/**
* 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) {
// 首先使用临时缓冲区间实现
ListNode *dummy = new ListNode(0);
ListNode *cur = new ListNode(0);
dummy->next = cur;
unordered_map<int,int> hash_map;
while(head!=NULL){
if(hash_map.find(head->val) == hash_map.end()){
//如果当前链表的值在哈希表上不存在,说明此时应该添加在链表上
ListNode *cure = new ListNode(head->val);
cur->next = cure;
cur = cure;
//将值添加到哈希表上
hash_map[head->val] = head->val;
}
head = head->next;
}
return dummy->next->next;
}
};

340

被折叠的 条评论
为什么被折叠?



