I have the following code to merge two sorted linked lists:
struct node* merge(struct node* a, struct node* b) { struct node dummy; struct node* tail = &dummy; dummy.next = NULL; while(1) { if(a == NULL) { tail->next = b; break; } else if (b == NULL) { tail->next = a; break; } if (a->data <= b->data) { MoveNode(&(tail->next), &a); } else { MoveNode(&(tail->next), &b); } tail = tail->next; } return(dummy.next); } void MoveNode(struct node** destRef, struct node** sourceRef) { struct node* newNode = *sourceRef; *sourceRef = newNode->next; newNode->next = *destRef; *destRef = newNode; } And it worked fine. I was trying to make it into a recursive method and this is what I got:
struct node* Merge(struct node* a, struct node* b) { struct node* result; if (a == NULL) return(b); else if (b==NULL) return(a); if (a->data <= b->data) { result = Merge(a->next, b); } else { result = Merge(a, b->next); } return(result); } But it has many of the nodes missing in the result. What is wrong?