-
新建一个node,其next指向pHead
-
通过map记录所有值出现次数
-
在遍历node,help指针指向node的zuiho如果下一个值是从重复的直接删除节点,如果是唯一的指针后移
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead) {
if (pHead == NULL) return pHead;
unordered_map<int, int> toDel; // 记录节点值数量
ListNode* head = new ListNode(-1);
head->next = pHead;
while (pHead) {
toDel[pHead->val]++;
pHead = pHead->next;
}
ListNode* help = head;
while (help->next) {
if (toDel[help->next->val] > 1) // 下个值重复跳过
help->next = help->next->next;
else // 下个值唯一加入链表指针后移
help = help->next;
}
return head->next;
}
};