修改一下程序,#include <stdio.h> typedef struct aa { int data; struct aa *next; } NODE; int fun(NODE *h) { int sum=0; NODE *p; /found/ p=h; while(p) { if(p->data%2==0) sum+=p->data; /found/ p=h->next; } return sum; } NODE *creatlink(int n) { NODE *h,p,s; int i; h=p=(NODE)malloc(sizeof(NODE)); for(i=1;i<n;i++) { s=(NODE)malloc(sizeof(NODE)); s->data=i%16; s->next=p->next; p->next=s; p=p->next; } p->next=NULL; return h; } outlink(NODE *h) { NODE *p; p=h->next; printf("HEAD"); while(p) { printf("->%d",p->data); p=p->next; } printf("\n"); } void main() { NODE *head; int sum; head = creatlink(10); outlink(head); sum = fun(head); printf("%d", sum); }
时间: 2023-12-07 10:04:57 浏览: 30
修改后的程序如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct aa {
int data;
struct aa *next;
} NODE;
int fun(NODE *h) {
int sum = 0;
NODE *p = h;
while (p) {
if (p->data % 2 == 0) {
sum += p->data;
}
p = p->next;
}
return sum;
}
NODE *creatlink(int n) {
NODE *h, *p, *s;
int i;
h = p = (NODE*)malloc(sizeof(NODE));
for (i = 1; i < n; i++) {
s = (NODE*)malloc(sizeof(NODE));
s->data = i % 16;
s->next = p->next;
p->next = s;
p = p->next;
}
p->next = NULL;
return h;
}
void outlink(NODE *h) {
NODE *p;
p = h->next;
printf("HEAD");
while (p) {
printf("->%d", p->data);
p = p->next;
}
printf("\n");
}
int main() {
NODE *head;
int sum;
head = creatlink(10);
outlink(head);
sum = fun(head);
printf("%d", sum);
return 0;
}
```
主要修改的地方如下:
1. 添加了 `#include <stdlib.h>` 头文件,以便使用 `malloc` 函数动态分配内存。
2. 在 `creatlink` 函数中, `h`、`p`、`s` 都要声明为 `NODE*` 类型的指针,而不能是 `NODE` 类型的结构体变量。
3. 在 `fun` 函数中,遍历链表时,每次要将 `p` 指向下一个节点,而不是 `h->next`。