两个单链表在原有空间中的连接

想求两个单链表在原有空间中的连接,并且从大到小排序
连接已经好的,排序应该怎么加
#include
#include

typedef struct Node{
int data;
struct Node *next;
}Node, *LinkList;

// 尾插法建立单链表
LinkList RearInsertCreat()
{
LinkList L;
Node *p, *rear;
int x;

L = (LinkList)malloc(sizeof(LinkList));
L -> next = NULL;

rear = L;

scanf("%d", &x);
while(x != -1)
{
    p = (Node *)malloc(sizeof(Node));
    p->data = x;
    p->next = rear->next;
    rear->next = p;    
    //rear指针后移,保证始终指向最后一个结点 
    rear = p;
    scanf("%d", &x);
}
rear->next=NULL;
return L; 

}
// 在原空间交叉合并两个单链表
LinkList MergeUp(LinkList LA, LinkList LB)
{
Node *p, *q, *n, *f; // p指针遍历链表LA,q指针遍历链表LB,n指针指向链表LB中q的下一个结点, f指针指向q指针指向的结点
p = LA->next;
q = LB->next;
n = NULL;
f = NULL;
while(p && q) //当p和q指针都不为空时 ,将LB中q指针指向的结点连接在LA中p指针指向的结点后,然后将此时的p结点更新至q的后继(LA中p的下一个结点)
{
//if(p->data <= q->data)
//{
n = q->next;
q->next = p->next;
p->next = q;
p = q->next;
f = q;
q = n;
//}
}
if(q) // 若LA遍历完后LB还有后继结点,将后继的第一个结点链接在f后,因为此时f保存的就是已经完成合并后的最后一个结点
{
f->next = q;
}

return LA;

}

void ViewList(LinkList L, Node *p)
{
p = L->next;
while(p)
{
printf("--%d",p->data);
p = p->next;
}
}

main()
{
LinkList LA, LB, LC;
Node *p;
LA = (LinkList)malloc(sizeof(LinkList));
LB = (LinkList)malloc(sizeof(LinkList));
LA = RearInsertCreat();
LB = RearInsertCreat();
LC = MergeUp(LA,LB);
p = LC->next;
ViewList(LC, p);
}