weixin_66188246 2022-12-19 19:05 采纳率: 0%
浏览 18

c语言 合并链表代码出错

两个有序链表合并为一个升序链表,函数是正确的,但用code block运行结果出错,请大家帮忙看看是不是mian里哪里有问题呢?


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

struct ListNode*hebing(struct ListNode*list1,struct ListNode*list2)
{
    struct ListNode*a,*b;
    a=(struct ListNode*)malloc(sizeof(struct ListNode));
      b=a;
    while(list1&&list2)
    {
        if(list1->val<list2->val)
        {
            b->next=list1;
            b=list1;
            list1=list1->next;
        }
        else
        {
            b->next=list2;
            b=list2;
            list2=list2->next;
        }
    }
    if(list1)
        b->next=list1;
    else

        b->next=list2;

    return a->next;

}

void printOut(struct ListNode *L) {
    struct ListNode *p = L->next;
    while (p) {
        printf("%d ", p->val);
        p = p->next;
    }
    printf("\n");
}

void create(struct ListNode *L, int X) {
    struct ListNode *t = (struct ListNode *)malloc(sizeof(struct ListNode));
    t->val = X;
    t->next = L->next;
    L->next = t;
}

int main()
{
    struct ListNode*list1,*list2,*he;
    list1=(struct ListNode*)malloc(sizeof(struct ListNode));
    list2=(struct ListNode*)malloc(sizeof(struct ListNode));
    he=(struct ListNode*)malloc(sizeof(struct ListNode));
    he->next=NULL;
    list1->next = NULL;
list2->next = NULL;
    int a[] = {1,2,4};
    int b[]={1,3,4};
    int k;
    for (k = 0; k < 3; k++)
        create(list1, a[2- k]);
    printOut(list1);
     for (k = 0; k < 3; k++)
        create(list2, b[2- k]);
    printOut(list2);
    printOut(hebing(list1,list2));
}

错误结果如图:

img

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-12-19 19:21
    关注

    修改处见注释,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    struct ListNode {
        int val;
        struct ListNode *next;
    };
    struct ListNode*hebing(struct ListNode*list1,struct ListNode*list2)
    {
        struct ListNode*a,*b;
        a=(struct ListNode*)malloc(sizeof(struct ListNode));
        b=a;
        list1 = list1->next;  //修改
        list2 = list2->next;  //修改
        while(list1&&list2)
        {
            if(list1->val<list2->val)
            {
                b->next=list1;
                b=list1;
                list1=list1->next;
            }
            else
            {
                b->next=list2;
                b=list2;
                list2=list2->next;
            }
        }
        if(list1)
            b->next=list1;
        else
            b->next=list2;
        return a;  //a->next; 修改
    }
    void printOut(struct ListNode *L) {
        struct ListNode *p = L->next;
        while (p) {
            printf("%d ", p->val);
            p = p->next;
        }
        printf("\n");
    }
    void create(struct ListNode *L, int X) {
        struct ListNode *t = (struct ListNode *)malloc(sizeof(struct ListNode));
        t->val = X;
        t->next = L->next;
        L->next = t;
    }
    int main()
    {
        struct ListNode*list1,*list2,*he;
        list1=(struct ListNode*)malloc(sizeof(struct ListNode));
        list2=(struct ListNode*)malloc(sizeof(struct ListNode));
        he=(struct ListNode*)malloc(sizeof(struct ListNode));
        he->next=NULL;
        list1->next = NULL;
        list2->next = NULL;
        int a[] = {1,2,4};
        int b[]={1,3,4};
        int k;
        for (k = 0; k < 3; k++)
            create(list1, a[2- k]);
        printOut(list1);
        for (k = 0; k < 3; k++)
            create(list2, b[2- k]);
        printOut(list2);
        printOut(hebing(list1,list2));
        return 0;
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 12月19日