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
思路就是把重复的结点的值设置为一个num 然后往后遍历 如果后面的值与这个相等 就删除这个结点;
CODE:
/**
* 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)
{
if(head==nullptr)
return nullptr;
ListNode *dummy=new ListNode (0);
ListNode *cur=dummy;
dummy->next=head;
while(cur->next&&cur->next->next)
{
if(cur->next->val==cur->next->next->val)
{
int num=cur->next->val;//重复的值进行 标记备份 如果下面的值有与它相等的就直接删除;
while(cur->next&&cur->next->val==num)
cur->next=cur->next->next;
}
else
cur=cur->next;
}
return dummy->next;
}
};