Remove Duplicates from Sorted List 题解
题目来源:Remove Duplicates from Sorted List
> 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.
解题思路:
ListNode *deleteDuplicates(ListNode *head)
{
ListNode * result = head;
ListNode * resultBak = result;
while(head)
{
while(head != NULL && head->val == result->val)
//free 'head'
head = head->next;
result->next = head;///result->val != head
result = result->next;
}
return resultBak;
}
把与上一个节点相同的值略过, [1] {1 1} 2 2 ... 上面代码保留相同中的第一个, 会造成内存泄漏。 下面代码是保留相同中的最后一个,之前的都delete掉。
ListNode *deleteDuplicates(ListNode *head)
{
if(head == NULL || head->next == NULL) return head;
ListNode dummy(-1);
ListNode * result = &dummy;
while(head)
{
while(head != NULL && head->next != NULL && head->val == head->next->val)
{
auto next = head->next; //1 1 1 2
delete head;//free 'head'
head = next;
}
result->next = head;
result = result->next;
if(head) head = head->next;
}
return dummy.next;
}
Last updated
Was this helpful?