有人可以改改代码嘛,这个输出除了第一个数是对的,其他的都是乱码

#include<stdio.h>
#include<stdlib.h>
typedef struct linknode{
int data;
int num;
struct linknode *next;
}linklist;
linklist *initlist(){
linklist *head;
head=(linklist *)malloc(sizeof(linklist));
head->next=NULL;
return head;
}
void creatlist(linklist *head){
linklist *s;
int i;
for(i=0;i<3;i++){
s=(linklist*)malloc(sizeof(linklist) );
scanf("%d%d",&s->num,&s->data);
head->next=s;
head=s;
printf("num=%d,sum=%d\n",s->num,s->data);
}
}
int main(){
linklist *head;
head=initlist();
creatlist(head);

}

creatlist函数中连接结构体的时候不应该用head=s,head是标记节点,里面没有数据,让head=s以后,再去printf显示,显示的内容就是不确定的数据。
代码修改如下:(修改的地方有注释)

#include<stdio.h>
#include<stdlib.h>
typedef struct linknode {
    int data;
    int num;
    struct linknode* next;
}linklist;
linklist* initlist() {
    linklist* head;
    head = (linklist*)malloc(sizeof(linklist));
    head->next = NULL;
    return head;
}
void creatlist(linklist* head) {
    linklist* s;
    int i;
    for (i = 0; i < 3; i++) {
        s = (linklist*)malloc(sizeof(linklist));
        scanf("%d%d", &s->num, &s->data);
        s->next = head->next; //添加这一句
        head->next = s;
        //head = s; //注释掉这一句
        printf("num=%d,sum=%d\n", s->num, s->data);
    }
}
int main() {
    linklist* head;
    head = initlist();
    creatlist(head);

}