Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.
第一次写的可能还有错误的代码:
For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.
相比第一次写的代码,这次的看起来有点代码之美的感觉,尤其是第一句if处理空和一个节点的情况。看看之前的代码,只处理了空的情况,结果后面的程序逻辑处理起来很繁琐,又很容易出错,代码质量太差了。第二次的代码出现了几个小错误,都是马虎所致。首先是if返回null,这是不对的,应该返回head,其次是把if里面的||写成了&&,导致oj报RTE,真的是太不细心了,离一次写完bugfree还差很远。
ListNode *deleteDuplicates(ListNode *head)
{
if (head == NULL || head->next == NULL) return head;
ListNode *pre = head;
ListNode *curr = head->next;
while(curr != NULL)
{
if (pre->val == curr->val)
{
pre->next = curr->next;
curr = curr->next;
}
else
{
pre = pre->next;
curr = curr->next;
}
}
return head;
}
第一次写的可能还有错误的代码:
//ListNode *deleteDuplicates(ListNode *head)
//{
// if (head == NULL) return head;
//
// ListNode *current = head;
// ListNode *lastUnDup = head;
//
// while (current!=NULL && current->next!=NULL)
// {
// if (current->val != current->next->val)
// {
// lastUnDup->next = current->next;
// lastUnDup = current;
// }
//
//
// }
// return head;
//}