C++之删除链表的重复元素
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
示例1:
输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]
示例2:
输入:[1, 1, 1, 1, 2]
输出:[1, 2]
因为会保留一个重复结点,所以在遍历链表的时候,我们就要判断这个节点是不是一个重复结点,这个时候set和unorder_set就比较合适了。
/**
* 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) {
set<int> s;
ListNode* cur=head;
while(cur&&cur->next)
{
s.insert(cur->val);
//如果此节点重复,则跨过cur->next
if(s.count(cur->next->val)) cur->next=cur->next->next;
else
cur=cur->next;
}
return head;
}
};