描述
给定一个排序链表,删除所有重复的元素每个元素只留下一个。
样例
给出 1->1->2->null
,返回 1->2->null
给出 1->1->2->3->3->null
,返回 1->2->3->null
标签
代码
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* };
*/
class Solution {
public:
/*
* @param head: head is the head of the linked list
* @return: head of linked list
*/
ListNode * deleteDuplicates(ListNode * head) {
// write your code here
ListNode * p = NULL, *tail = NULL, *q = NULL;
p = head;
while(p!=NULL)
{
tail = p->next;
if(tail!= NULL && p->val == tail->val) //出现重复数字
{
q = tail;
while(tail) //判断是否出现多个重复数字
if(tail->val == p->val)
tail = tail->next;
else
break;
p->next = tail;
// free(q);
}
p = p->next;
}
return head;
}
};
错误
因为忽略了条件:
while(tail)
if(tail->val == p->val)
tail = tail->next;
else
break;
出现了以下错误:
Wrong Answer
总耗时:
208 ms
41% 数据通过测试.
输入
-14->-14->-13->-13->-13->-13->-12->-12->-11->-10->-9->-9->-9->-9->-9->-9->-9->-9->-8->-8->-8->-7->-7->-7->-4->-4->-4->-4->-2->-1->-1->-1->-1->-1->-1->0->0->1->1->2->2->2->2->2->3->3->4->5->5->5->5->5->5->6->6->6->7->7->7->7->7->8->8->9->9->10->10->10->10->11->11->12->13->14->14->14->15->15->15->16->17->17->17->17->17->17->18->18->19->19->19->20->20->20->20->20->21->22->22->23->23->23->23->24->25->25->25->25->25->null
你的打印日志
-14 -13 -13 -12 -9 -9 -9 -9 -8 -7 -4 -4 -1 -1 -1 0 1 2 2 3 5 5 5 6 7 7 8 9 10 10 11 14 15 17 17 17 18 19 20 20 22 23 23 25 25
输出
-14->-13->-13->-12->-11->-10->-9->-9->-9->-9->-8->-8->-7->-7->-4->-4->-2->-1->-1->-1->0->1->2->2->2->3->4->5->5->5->6->6->7->7->7->8->9->10->10->11->12->13->14->14->15->15->16->17->17->17->18->19->19->20->20->20->21->22->23->23->24->25->25->25->null
期望答案
-14->-13->-12->-11->-10->-9->-8->-7->-4->-2->-1->0->1->2->3->4->5->6->7->8->9->10->11->12->13->14->15->16->17->18->19->20->21->22->23->24->25->null