C语言 如何克服分割错误,同时执行添加2个单链表



在下面的代码中,我将数字作为输入,并将奇数发送给list1,将偶数发送给list2。最后,我添加了清单1中的值&并将它们存储在清单3中。但我得到分割错误。请帮帮我

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct node//list creation
{
    int data;
    struct node *next;
};
struct node *list1;
struct node *list2;
struct node *list3;
/*creating list*/
void create(struct node *l, int x)
{
    l->data = x;
    l->next = NULL;
}
/* adding elements to list*/
void addlast(struct node *li, int x)
{
    struct node *temp = NULL;
    temp = (struct node *) malloc(sizeof(struct node));
    temp->data = x;
    while (li->next != NULL)
        li = li->next;
    li->next = temp;
    temp->next = NULL;
}
/* printing values */
void print(struct node *lb)
{
    if (lb == NULL)
        printf("empty");
    else
    {
        while (lb->next != NULL)
        {
            printf(" % d->", lb->data);
            lb = lb->next;
        }
        printf(" % d->", lb->data);
    }
}
/* performing addition */
void add(struct node *l1, struct node *l2)
{
    int value, c = 0;
    while (l1->next != NULL || l2->next != NULL)
    {
        value = l1->data+l2->data;
        if (c == 0)
        {
            create(list3, value);
            c++;
        }
        else
        {
            addlast(list3, value);
        }
        l1 = l1->next;
        l2 = l2->next;
    }
    printf("list3");
    print(list3);
}
int main()
{
    int i, n, a[20], c1 = 0, c2 = 0;
    list1 = (struct node *) malloc(sizeof(struct node));
    list2 = (struct node *) malloc(sizeof(struct node));
    list3 = (struct node *) malloc(sizeof(struct node));
    printf("n Enter the number of numbers");
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
        if (a[i] % 2 == 0)
        {
            if (c1 == 0)
            {
                create(list1, a[i]);
                c1++;
            }
            else
                addlast(list1, a[i]);
        }
        if (a[i] % 2 != 0)
        {
            if (c2 == 0)
            {
                create(list2, a[i]);
                c2++;
            }
            else
                addlast(list2, a[i]);
        }
    }
    printf("list1");
    print(list1);
    printf("n");
    printf("list2");
    print(list2);
    add(list1, list2);
    return 0;
}

问题是添加中的while循环条件。您应该检查l1->next或l2->next是否为空。以下是更正后的版本。

/* performing addition */
void add(struct node *l1, struct node *l2)
{
    int value, c = 0;
    //you can only add if the two lists have same number of elems
    while (l1->next != NULL && l2->next != NULL)
    {
        value = l1->data + l2->data;
        if (c == 0)
        {
            create(list3, value);
            c++;
        }
        else
        {
            addlast(list3, value);
        }
        l1 = l1->next;
        l2 = l2->next;
    }
    //if lists dont have equal number of elements
    //find the list which is not empty and append the
    //elems to l3 here
    printf("list3");
    print(list3);
}

相关内容

  • 没有找到相关文章

最新更新