题目描述:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
Example
题目思路:
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
这题就是找到duplicated node,然后一个一个删。由于删掉node之后就没有node->val == node->next->val的关系了,所以这里用一个dup来记录找到的duplicated number,这样就可以有的放矢的删node了。
Mycode(AC = 42ms):
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution{
public:
/**
* @param head: The first node of linked list.
* @return: head node
*/
ListNode * deleteDuplicates(ListNode *head) {
// write your code here
ListNode *dummy = new ListNode(INT_MAX);
dummy->next = head;
ListNode *tmp = dummy;
int dup = INT_MAX;
while (tmp && tmp->next) {
// record the duplicate number
if (tmp->next->next && tmp->next->val == tmp->next->next->val) {
dup = tmp->next->val;
}
// remove the duplicate node one by one
if (dup == tmp->next->val) {
tmp->next = tmp->next->next;
continue;
}
tmp = tmp->next;
}
return dummy->next;
}
};