YaYa很开心 2022-06-10 01:38 采纳率: 81.3%
浏览 30
已结题

C语言按规则合并为新链表

运行没有输出,请大家帮我看看
题目:设链表 A=(a1,a2,…,am),B=(b1,b2,…,bn),试编写一个按下列规则合并 A、B 为链表 C 的算法,使得: (利用原表结点空间)。
C=(a1,b1,…,am, bm, bm+1,…bn) m≤n
C=(b1,a1,…,bn, an, an+1,…am) m

#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
    int date;
    struct node* next;
}node,*list;
list create(int*len);
int main()
{
    int m,n; 
    list A=create(&m);
    list B=create(&n);
    list C;
    list p=A->next,q=B->next;
    if(m<=n){
        C=A;
        while(p&&q){
            list t=p->next;
            list s=q->next;
            q->next=p->next;
            p->next=q;
            p=t;
            q=s;
        }
        p->next=q;
        free(B);
    }
    else if(m>n){
        while(p&&q){
        C=B;
        list t=q->next;
        list s=p->next;
        p->next=q->next;
        q->next=p;
        q=t;
        p=s;
        }
        q->next=p;
        free(A);
    }
    list f=C->next;
    while(f){
        printf("%d ",f->date);
    }
    return 0;
}
list create(int*len)
{
    int x,i=0;
    list head=(list)malloc(sizeof(node));
    head->date=0;
    head->next=NULL;
    list q=head;
    do{
        scanf("%d",&x);
        i++;
        list p=(list)malloc(sizeof(node));
        p->date=x;
        q->next=p;
        p->next=NULL;
        q=p;
    }while(getchar()!='\n');
    return head;
}
  • 写回答

1条回答 默认 最新

  • 浪客 2022-06-10 10:32
    关注
    
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct node
    {
        int date;
        struct node *next;
    } node, *list;
    
    list create(int *len);
    
    list insert(list P, list Q) // Q插入到P,保留P
    {
        list p, q, t, s;
        p = P->next, q = Q->next;
    
        while (p->next)
        {
            t = p->next;
            s = q->next;
            p->next = q;
            q->next = t;
            p = t;
            q = s;
        }
        if (q)
            p->next = q;
        free(Q);
        return P;
    }
    
    int main()
    {
        int m, n;
        list A = create(&m);
        list B = create(&n);
        list C;
    
        if (m <= n)
            C = insert(A, B);
        else
            C = insert(B, A);
    
        list f = C->next;
    
        while (f)
        {
            printf("%d ", f->date);
            f = f->next;
        }
    
        return 0;
    }
    
    
    list create(int *len)
    {
        int x;//, i = 0;
        *len=0;
        list head = (list)malloc(sizeof(node));
        head->date = 0;
        head->next = NULL;
        list q = head;
    
        do
        {
            scanf("%d", &x);
            (*len)++;//i++;
            list p = (list)malloc(sizeof(node));
            p->date = x;
            q->next = p;
            p->next = NULL;
            q = p;
        } while (getchar() != '\n');
        
        return head;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月18日
  • 已采纳回答 6月10日
  • 创建了问题 6月10日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么