I've created the following nodes in my list:

Code:addElement(&start, "B", 1); addElement(&start, "D", 2); addElement(&start, "A", 3); addElement(&start, "C", 4);

next i have a loop which runs it x amount of nodes. It compares the next element with the current element

i.e. : if ( B is greater than A)

i then pass a reference to the current node(petId) i.e. B and it swaps it to AB

i then run my sort function:Code:for(i=0; i <= 5; i++){ while (start && start->next != NULL) { if (strcmp(start->next->petName, start->petName) <0){ current=swap(current,start->petId); } start = start->next; } start = head; }

The original listCode:petNode* swap(petNode *current, int petId) { petNode *temp; petNode *tmp; temp=current; if(current->petId==petId) { tmp=current->next; current->next=current->next->next; tmp->next=current; current=tmp; return(current); } else { while(temp->next->next!=NULL) { if(temp->next->petId==petId) { tmp=temp->next->next; temp->next->next=temp->next->next->next; tmp->next=temp->next; temp->next=tmp; break; } temp=temp->next; } return(current); } }

DBAC becomes BACD

and i can't figure it out. it works for some combos like:

BDAC becomes ABCD... any ideas??

i have tried printing the list after every swap the occurs and get:

BDAC

BDAC

BADC

BACD

i'm stuck :|