编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
示例1:
输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3]
示例2:
输入:[1, 1, 1, 1, 2] 输出:[1, 2]
提示:
- 链表长度在[0, 20000]范围内。
- 链表元素在[0, 20000]范围内。
题解:
指针p遍历整个链表,判断p->next的数据是否已经出现过了,如果已经出现过了,则跳过p->next,即p->next = p->next->next;
如果没出现过,则p=p->next继续遍历。
/**
* 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 == NULL)
return head;
map<int, int>mp;
ListNode* p = head;
mp[p->val] = 1;
while(p->next != NULL)
{
if(mp[p->next->val] == 0)
{
mp[p->next->val] = 1;
p = p->next;
}
else
p->next = p->next->next;
}
return head;
}
};