node_t *merge_sorted_list(node_t *head1, node_t *head2) { if(head1 == NULL && head2 == NULL) { return NULL; } if(head2 == NULL) { head1 -> next = merge_sorted_list(head1 -> next, head2); return head1; } if(head1 == NULL) { head2 -> next = merge_sorted_list(head1, head2 -> next); return head2; } if(head1 -> data < head2 -> data) { head1 -> next = merge_sorted_list(head1 -> next, head2); return head1; } else { head2 -> next = merge_sorted_list(head1, head2 -> next); return head2; } }
int main(void) { node_t *a = create_sorted_list(3200); node_t *b = create_sorted_list(1600); print_list(a); print_list(b); node_t *c = merge_sorted_list(a, b); print_list(c); free_list(c); /* No need to free a/b, already merged in c */ return 0; }
int main(int argc, char** argv) { list_t* list = create_list(); for (int i=0; i<10; i++) { append_list(list, i); } traverse(list); reverse(list); traverse(list); list_t* foo = create_list(); list_t* bar = create_list(); for (int i=0; i<10; i++) { append_list(foo, 2*i); append_list(bar, 2*i + 1); } traverse(foo); traverse(bar); traverse(merge_sorted_list(foo, bar)); return 0; }