Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
删除有序链表中多余一次出现的节点
需要判断当前节点是否等于下一节点,若不等,当前节点后移动,否则,当前节点移动到第一个不等于当且节点的位置,将前驱节点的next指向该节点
简单的作法是遍历一次链表,记录下那些节点出现次数大于1
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
// Note: The Solution object is instantiated only once and is reused by each test case.
map<int,int> m;
ListNode *it = head;
while(it != NULL) {
if(m.find(it->val) == m.end()) {
m[it->val] = 1;
}else {
m[it->val] = 2;
}
it = it->next;
}
ListNode *dummy = new ListNode (-1);
ListNode *dp = dummy;
it = head;
while(it) {
if(m[it->val] == 1) {
dp->next = it;
dp = dp->next;
it = it->next;
}
else {
it = it->next;
}
}
dp->next = NULL;
return dummy->next;
}
};