求解答,不是什么难得问题啊

假设有两个按元素值非递减有序排列的正整数序列,请以单链表存储结构构造线性表A和B,然后再把A表和B表归并成一个按元素值非递增有序排列的线性表C。同时在C表中实现如下两个功能:1、查找是否存在值为x的元素;2、删除值为y的元素。
要求:
1、单链表A、B和C都不含头结点。
2、首先根据两个非递减序列建立单链表A和B,然后再构造单链表C。
3、创建单链表A和B时,直接从键盘输入两个非递减的序列,0为输入结束的标志。
4、不能利用原表(即A表和B表)的结点空间,即构造的C表中每个结点空间要重新申请。


#include<stdio.h>
#include<stdlib.h>

struct MyList{
    int val;
    MyList* next;
};

MyList* createNode(int val)
{
    MyList* x = (MyList*)malloc(sizeof(MyList));
    x->val = val;
    x->next = NULL;
    return x;
} 

bool select_val(MyList* head, int val)
{
    MyList* p = head;
    while(p != NULL && p->val <= val)
    {
        if(p->val == val)
            return true;
        p = p->next;
    }
            
    return false;
}

bool delete_val(MyList* &head, int val)
{
    MyList* p = head;
    MyList* f = NULL;
    while(p != NULL && p->val <= val)
    {
        if(p->val == val)
        {
            if(head == p)
                head = head->next;
            else 
                f->next = p->next;
                
            delete(p);
            return true;
        }
        f = p;
        p = p->next;
    }
            
    return false;
}

void showList(MyList* head)
{
    MyList* p = head;
    while(p != NULL)
    {
        printf("%d ", p->val);
        p = p->next;
    }
    printf("\n");
}

int main()
{
    int val;
    MyList* A = NULL;
    MyList* p = NULL;
    while(true)
    {
        scanf("%d", &val);
        if(val == 0) break;
        
        MyList* x = createNode(val);
        if(A == NULL) A = x;
        else p->next= x;
        
        p = x;
    }
    showList(A);
    
    MyList* B = NULL;
    MyList* s = NULL;
    while(true)
    {
        scanf("%d", &val);
        if(val == 0) break;
        
        MyList* x = createNode(val);
        if(B == NULL) B = x;
        else s->next= x;
        
        s = x;
    }
    showList(B);
    
    p = A;
    s = B;
    MyList* C = NULL;
    MyList* ce = NULL;
    while(p != NULL || s != NULL)
    {
        if(s == NULL || (p != NULL && p->val <= s->val))
        {
            MyList* x = createNode(p->val);
            if(C == NULL) C = x;
            else ce->next= x;
            ce = x;
            p = p->next;
        }
        else
        {
            MyList* x = createNode(s->val);
            if(C == NULL) C = x;
            else ce->next= x;
            ce = x;
            s = s->next;
        }
    }
    showList(C);
    
    delete_val(C, 5);
    showList(C);
    
    delete_val(C, 3);
    showList(C);
    
    delete_val(C, 1);
    showList(C);
    
    return 0;
}