关于c语言数据合并和排列的问题

下面是我的code,就是能够合并两个list并排序的。(例如:list1=5 4 3 2; list2=7 3 2 1的话,就会合并成7 5 4 3 3 2 2 1)我编好了合并的那一部分,排列那一部分我问了外网,外网人给了点提示,但是我还是不怎么明白,请问有人能帮我填满下面的空档吗?sortlist的while(finish)部分需要填。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct node {
    int data;
    struct node* link;
}NODE;
void addNode(NODE** head, int data) {
    NODE* p = *head;
    NODE* temp = (NODE*)malloc(sizeof(NODE));
    temp->data = data;
    temp->link = NULL;
    if (*head == NULL) {
        *head = temp;
        return;
    }
    while (p->link) p = p->link;
    p->link = temp;
}

void showList(NODE* head) {
    NODE* p = head;
    while (p) {
        printf("%d%s", p->data, p->link ? "->" : "");
        p = p->link;
    }
    printf("\n");
}

NODE* sortList(NODE* X, NODE* Y) {
    int finish = 1;
    NODE* headNode;
    NODE* base; // 大的数
    NODE* challenger; // 小的数
    NODE* preNode;
    if (X->data > Y->data) {
        headNode = X;
        base = X->link;
        challenger = Y;
        preNode = X;
    }
    else {
        headNode = Y;
        base = Y->link;
        challenger = X;
        preNode = Y;
    }
    while (finish) {

        if (challenger->data > base->data) {

        }
        else {

        }

        if (base == NULL) {

        }
        if (challenger == NULL) {

        }
    }
    return headNode;
}

int main() {
    NODE* L1 = NULL;
    NODE* L2 = NULL;
    printf("&head = %p\thead = %p", &L1, L1);
    addNode(&L1, 14);
    printf("&head = %p\thead = %p", &L1, L1);
    addNode(&L1, 10); addNode(&L1, 5); addNode(&L1, 4); addNode(&L1, 1);
    addNode(&L2, 15); addNode(&L2, 10); addNode(&L2, 6); addNode(&L2, 3); addNode(&L2, 1);
    showList(L1);
    showList(L2);
    showList(sortList(L1, L2));
}

修改如下,供参考:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct node {
    int  data;
    struct node* link;
}NODE;
void addNode(NODE** head, int data) {
    NODE* p = *head;
    NODE* temp = (NODE*)malloc(sizeof(NODE));
    temp->data = data;
    temp->link = NULL;
    if (*head == NULL) {
        *head = temp;
        return;
    }
    while (p->link) p = p->link;
    p->link = temp;
}
void showList(NODE* head) {
    NODE* p = head;
    while (p) {
        printf("%d%s", p->data, p->link ? "->" : "");
        p = p->link;
    }
    printf("\n");
}
NODE* sortList(NODE* X, NODE* Y) {
    int   finish = 1;
    NODE* headNode;
    NODE* base; // 大的数
    NODE* challenger; // 小的数
    NODE* preNode;
    if (X->data > Y->data) {
        headNode = X;
        base = X->link;
        challenger = Y;
        preNode = X;
    }
    else {
        headNode = Y;
        base = Y->link;
        challenger = X;
        preNode = Y;
    }
    while (finish) {
        if (base == NULL) {
            preNode->link = challenger;
            break;
        }
        if (challenger == NULL) {
            preNode->link = base;
            break;
        }
        if (challenger->data > base->data) {
            preNode->link = challenger;
            preNode = challenger;
            challenger = challenger->link;
        }
        else {
            preNode->link = base;
            preNode = base;
            base = base->link;
        }
    }
    return headNode;
}
int main() 
{
    NODE* L1 = NULL;
    NODE* L2 = NULL;
    printf("&head = %p\thead = %p\n", &L1, L1);
    addNode(&L1, 14);
    printf("&head = %p\thead = %p\n", &L1, L1);
    addNode(&L1, 10); addNode(&L1, 5);  addNode(&L1, 4); addNode(&L1, 1);
    addNode(&L2, 15); addNode(&L2, 10); addNode(&L2, 6); addNode(&L2, 3); addNode(&L2, 1);
    showList(L1);
    showList(L2);
    showList(sortList(L1, L2));
    return 0;
}