完善数据结构代码,解惑

设计一个程序,生成两个按值非递减有序排列的线性表LA和LB,再将LA和LB归并为一个新的线性表LC,且LC中的数据仍按值非递减有序排列,输出线性表LA、LB、LC。
用单链表来实现,以下是部分归并函数,总函数想要实现分别输入两个线性表内元素的个数,然后用rand以及srand函数赋随机值,再实现归并,有专家完善一下吗

Lnode *hb(Lnode *pa,Lnode*pb)
{
    Lnode *p,*q,*pc;
    pb=pb->next;
    pa=pa->next;
    pc=(Lnode*)malloc(sizeof(Lnode));
    p=pc; 
while(pa&&pb)
{
    q=(Lnode*)malloc(sizeof(Lnode));
    if(pb->data<pa->data)
    {
        q->data=pb->data;
        pb=pb->next;
    }
    else
    {
        q->data=pa->data;
        pa=pa->next; 
    }
    p->next=q;
    p=q;
}
while(pa)
{
    q=(Lnode*)malloc(sizeof(Lnode));
    q->data=pa->data;
    pa=pa->next;
    p->next=q;
    p=q;
}
while(pb)
{
    q=(Lnode *)malloc(sizeof(Lnode));
    q->data=pb->data;
    pb=pb->next;
    p->next=q;
    p=q;
}
p->next=NULL;
retuen(pc);
}

```

遍历链表,在遍历的时候比较,小的先插入新链表就可以了,你的hb代码看着没有问题,那么就是在创建链表的时候,根据随机生成的数插入链表中,使之非递减。
代码及运行结果如下:

img

代码:


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

typedef struct lnode
{
    int data;
    struct lnode* next;
}Lnode;


Lnode* inserNode(Lnode* head, Lnode* p)
{
    Lnode* pre,*t;
    pre = head;
    t = pre->next;
    while (t)
    {
        if (t->data >= p->data)
            break;
        else
        {
            pre = t;
            t = t->next;
        }

    }
    if (t == 0)
    {
        pre->next = p;
    }
    else
    {
        pre->next = p;
        p->next = t;
    }
    return head;
}


Lnode* CreateList(int n)
{
    int i;
    Lnode* head = (Lnode*)malloc(sizeof(Lnode));
    Lnode* t;
    head->next = 0;
    
    for (i = 0; i < n; i++)
    {
        t = (Lnode*)malloc(sizeof(Lnode));
        t->data = rand()%100; //生成0~99的整数
        t->next = 0;
        head = inserNode(head, t);
    }
    return head;
}


Lnode* hb(Lnode* pa, Lnode* pb)
{
    Lnode* p, * q, * pc;
    pb = pb->next;
    pa = pa->next;
    pc = (Lnode*)malloc(sizeof(Lnode));
    p = pc;
    while (pa && pb)
    {
        q = (Lnode*)malloc(sizeof(Lnode));
        if (pb->data < pa->data)
        {
            q->data = pb->data;
            pb = pb->next;
        }
        else
        {
            q->data = pa->data;
            pa = pa->next;
        }
        p->next = q;
        p = q;
    }
    while (pa)
    {
        q = (Lnode*)malloc(sizeof(Lnode));
        q->data = pa->data;
        pa = pa->next;
        p->next = q;
        p = q;
    }
    while (pb)
    {
        q = (Lnode*)malloc(sizeof(Lnode));
        q->data = pb->data;
        pb = pb->next;
        p->next = q;
        p = q;
    }
    p->next = NULL;
    return(pc);
}


//显示
void printList(Lnode* head)
{
    Lnode* p;
    if (head == 0 || head->next == 0)
    {
        printf("链表为空\n");
        return;
    }
    else
    {
        p = head->next;
        while (p)
        {
            printf("%d ", p->data);
            p = p->next;
        }
        printf("\n");
    }
}

int main()
{
    int m, n;
    Lnode* la=0, *lb=0,*lc=0;
    srand((unsigned int)time(NULL));
    printf("请数量链表A和链表B的长度:");
    scanf("%d %d", &m, &n);
    la = CreateList(m);
    printf("链表A:");
    printList(la);
    lb = CreateList(n);
    printf("链表B:");
    printList(lb);
    lc = hb(la, lb);
    printf("合并后的链表为:");
    printList(lc);
    return 0;
}


您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632