There are many many things wrong with this.
Let us start with MergeSort.
Ok explain
int k = 1;
for ( i=0;i<k;i++)
{
q = q->next;
}
Ok we have (A) a global variable as a loop index !!
(B) a loop that never does anything more than
q = np->next;
Then we have three (!!) while loops
Then we have a piece of repeated code in the if(q->info < p->info) if/else construct. Likely to cause errors later.
The we have a while loop with a first line break / So what about making it part of the condition OR was the intention to escape higher.
Then you break out of the while loop on the condition that q IS null
and then expect p=q and q=p->next to work.
Overall, this is a mess. Sorry, I think you compeletely miss understood merge sort. The normal structure is something like three whiles but not embedded. Try http://en.wikipedia.org/wiki/Merge_sort
to see how.