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.
We can use the same idea as removing duplicates from sorted array. Set up two iterators and if current iter is equal to iter_new, make iter move one step forward.
C++ Code:
/*
* func: delete_duplicates
* goal: remove duplicate nodes from sorted list
* @param head: head node of the list
* return: the head of the de-duplicated list
*/
ListNode *delete_duplicates(ListNode *head){
if(head == nullptr){
return head;
}
ListNode *iter = head;
ListNode *iter_n = head;
while(iter != nullptr){
//If the current value is equal to previous, move forward
if(iter->val == iter_n->val){
iter = iter->next;
}else{
//Copy values
iter_n = iter_n->next;
iter_n->val = iter->val;
iter = iter->next;
}
}
//Delete remaining nodes
ListNode *del = iter_n->next;
while(del != nullptr){
ListNode *next = del->next;
delete del;
del = next;
}
iter_n->next = nullptr;
return head;
}
Python Code:
# func: remove duplicates from sorted list
# @param head: head node of the list
# @return: head node of the list
def remove_duplicates(head):
if not head:
return head
iter_new = head
iter = head
while iter is not None:
if iter.val == iter_new.val:
iter = iter.next
else:
iter_new = iter_new.next
iter_new.val = iter.val
iter = iter.next
iter_new.next = None
return head
No comments:
Post a Comment