题目:
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
.
思路:
参考删除有序链表中重复的数:http://blog.csdn.net/u012243115/article/details/41077063。
但是这一题比那一题复杂,直接看代码。
代码:
/**
* 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 *dummy = new ListNode(-1);//定义虚拟头结点
ListNode *cur = head , *p = dummy;
while(cur)
{
bool isDuplicate = false;
while(cur->next && cur->val == cur->next->val)
{
isDuplicate = true;
ListNode *tmp = cur;
cur = cur->next;
delete tmp;
}
//如果有重复就把重复的最后一个元素删掉
if(isDuplicate)
{
ListNode *tmp = cur;
cur = cur->next;
delete tmp;
}
else
{
p->next = cur;
p = p->next;
cur = cur->next;
}
}
p->next = NULL;//把最后一个结点的next置为空
return dummy->next;
}
};