链表求和出现问题,怎么改

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

img

img


#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct Plural)
struct Plural
{
    int a;
    int b;
    struct Plural* next;
};
int main()
{
    int suma=0, sumb=0;
    struct Plural* head = NULL, * p1 = NULL, * p2 = NULL, * p = NULL;
    p2 = p1 = (struct Plural*)malloc(LEN);
    head = p1;
    for (int i = 0; i < 10; i++)
    {
        scanf_s("%d%d", &p1->a, &p1->b);
        p1 = (struct Plural*)malloc(LEN);
        p2->next = p1;
        p2 = p1;
    }
    p1->next = NULL;
    p = head;
    while (p)
    {
        suma += p->a;
        sumb += p->b;
        p = p->next;
    }
    printf("%d+%di", suma, sumb);
    return 0;
}

你这么写的话,最后一个节点就没有输入a和b的值了啊

 
 
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct Plural)
struct Plural
{
    int a;
    int b;
    struct Plural* next;
};
int main()
{
    int suma=0, sumb=0;
    struct Plural* head = NULL, * p1 = NULL, * p2 = NULL, * p = NULL;

    for (int i = 0; i < 10; i++)
    {
        p1 = (struct Plural*)malloc(LEN);
        scanf_s("%d%d", &p1->a, &p1->b);
        if(head == NULL)
              head = p1;
        else
             p2->next = p1;
        p2 = p1;
    }
    p1->next = NULL;
    p = head;
    while (p)
    {
        suma += p->a;
        sumb += p->b;
        p = p->next;
    }
    printf("%d+%di", suma, sumb);
    return 0;
}
 

第19行 和 第20行互换位置。
第25行:p = head; 修改为: p = head->next;

img