Node* MergeSortLinks(Node *h, int n)...{ if(n<=1) return; int n1,n2,i,t1=0,t2=0; Node *h1,*h2,*hh=NULL,*cur=NULL,*p; n1=n/2, n2=n-n1; p=h; for(i=0;i<n1;i++) p=p->next; h1=MergeSortLinks(h,n1); h2=MergeSortLinks(p,n2); while(t1<n1 || t2<n2)...{ if(t1<n1 && t2<n2) if(h1->key < h2->key) p=h1, h1=h1->next,t1++; else p=h2, h2=h2->next,t2++; else if(t1<n1) p=h1, h1=h1->next,t1++; else p=h2, h2=h2->next,t2++; if(NULL==hh) hh=cur=p; else cur->next=p, cur=cur->next; } h1=h2=p=cur=NULL; return hh;}Node* Sort(Node * head)...{ Node *p; int n=0,i; p=head; while(p)...{ n++; p=p->next; } head=MergeSortLinks(head,n); p=head; for(i=0;i<n-1;i++) p=p->next; p->next=NULL;}