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;
}
}
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment