Sunday, April 22, 2012

linked list series

Given a sorted linked list, delete all duplicate numbers, leave only distinct numbers from original list. e.g., given 1->2->3->3->4->4->5, return 1->2->5. Given 1->1->1->2->3, return 2->3. void removeDuplicated(node* ll) { if(!ll) return; if(!ll->next) return; node* ptr1, ptr2; ptr1 = ll; ptr2 = ptr1->next; while(1) { if(ptr1->v == ptr2->v) { while(ptr1->v == ptr2->v) { node* ptr3 = ptr2->next; llDeleteNode(ll,ptr3); ptr2 = ptr3; if(!ptr2) break; } llDeleteNode(ll, ptr1); if(!ptr2) return; if(!ptr2->next) return; ptr1 = ptr2; ptr2 = ptr2->next; } } } Given a singly linked list swap the adjacent nodes in the list 1-4-5-6-3 4-1-6-5-3 void llReverse2(node** ll) { node *p1, *p2; p1 = *ll; if(!p1) return; if(!p1->next) return; *ll = p1->next; p2 = NULL; while(p1 && p1->next) { node *p3, *p4; p3 = p1; p4 = p1->next; p1 = p4->next; if(p2) p2->next = p4; p4->next = p3; p3->next = p1; p2 = p3; } }

No comments:

Post a Comment