题目:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
Example 1:
Input: 1->2->3->3->4->4->5 Output: 1->2->5
Example 2:
Input: 1->1->1->2->3 Output: 2->3
描述:
给出一个有序链表,若某元素重复出现,则删除所有该哦元素
分析:
链表的简单操作,只需要额外添加一个标志位,来标识重复出现的元素中的第一个
代码:(时间复杂度O(n))
/**
* 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) {
ListNode *my_head = new ListNode(0);
ListNode *current = my_head;
my_head->next = head;
bool flag = false;
while (current->next && current->next->next) {
ListNode *temp = current->next->next;
if (current->next->val == temp->val) {
current->next->next = temp->next;
delete temp;
flag = true;
} else {
if (flag) {
delete current->next;
current->next = temp;
flag = false;
} else {
current = current->next;
}
}
}
if (flag) {
ListNode *temp = current->next->next;
delete current->next;
current->next = temp;
}
return my_head->next;
}
};