问题:定义一个链表结构如下:
struct ListNode {
int value;
struct ListNode *next;
};
请写一个程序,实现链表中重复节点的删除(同一值的节点只保留一个),且链表顺序保持不变。如,
初始链表:3 -> 2 -> 3 -> 4 -> 4 -> 1 -> 7 -> 8
节点去重后的链表:3 -> 2 -> 4 -> 1 -> 7 -> 8
注意:初始链表是非排序的链表。
ListNode* head = new ListNode(1);
/*ListNode* p = head;
for(int i = 2; i <= 5; ++ i){
p->next = new ListNode(i);
p = p->next;
p->next = new ListNode(i);
p = p->next;
}*/
cout<<endl;
unordered_set<int> mset;
ListNode* nhead = head;
ListNode* pre = nullptr;
while(nhead){
int x = nhead->val;
if(!mset.count(x)){
mset.insert(x);
}else{
pre->next = nhead->next;
}
pre = nhead;
nhead = nhead->next;
}/*
while(head){
cout<< head->val << " ";
head = head->next;
}*/
return 0;
}