学习了链表,但是输出数据总是奇怪,是输出错了还是哪错了呀


//main.c
#include<stdio.h>
#include"linklist.h"
int main()
{
    LinkList *a=create(5);
    puts_(a);
    return 0;
}

//linklist.h
typedef struct student{
    int score;
    struct student* next;
}LinkList;
LinkList *create(int n);
void change(LinkList *list,int n);
void delete(LinkList *list,int n);
void insert(LinkList *list,int n);
void puts_(const LinkList *list);

//linklist.c
#include"linklist.h"
#ifndef _LINKLIST_H_
#define _LINKLIST_H_
/*typedef struct student{
    int score;
    struct student* next;
}LinkList;*/
LinkList *create(int n){
    LinkList *head,*node,*end;
    head=(LinkList*)malloc(sizeof(LinkList));
    end=head;
    int i;
    for(i=0;i<n;i++){
    node=(LinkList*)malloc(sizeof(LinkList));
    printf("请输入数据:\n");
    scanf("%d",node->score);
    end->next=node;
    end=node;
    }
    end->next=0;
    return head;
}

void change(LinkList *list,int n){
    LinkList *t=list;
    int i=0;
    while(i<n&&t!=0){
        t=t->next;
        i++;
    }
    if(t!=0){
        printf("请输入修改后的值:\n");
        scanf("%d",&t->score); 
    }else
        puts("节点不存在");
}

void delete(LinkList *list,int n){
    LinkList *t,*in;
    int i=0;
    t=list;
    while(t!=0&&i<n){
        in=t;
        t=t->next;
        i++;
    }
    if(t!=0){
        in->next=t->next;
        free(t);
    }else{
        puts("节点不存在");
    }
}

void insert(LinkList *list,int n){
    LinkList *t,*in;
    int i=0;
    t=list;
    while(t!=0&&i<n){
        t=t->next;
        i++;
    }
    if(t!=0){
        in=(LinkList*)malloc(sizeof(LinkList));
        puts("要插入的值");
        scanf("%d",&in->score);
        in->next=t->next;
        t->next=in;
    }else{
        puts("节点不存在");
    }
}

void puts_(const LinkList *list){
    LinkList *t=list;
    while(t!=0){
        t=t->next;
        printf("%-3d",t->score);
    }
}
#endif

img

修改处见注释,供参考:

//main.c
#include<stdio.h>
#include"linklist.h"
int main()
{
    LinkList *a=create(5);
    puts_(a);
    return 0;
}

//linklist.h
typedef struct student{
    int score;
    struct student* next;
}LinkList;
LinkList *create(int n);
void change(LinkList *list,int n);
void Delete(LinkList *list,int n);//delete 是关键字,所以 d 改大写 Delete
void insert(LinkList *list,int n);
void puts_(const LinkList *list);
 
//linklist.c
#include"linklist.h"
#ifndef _LINKLIST_H_
#define _LINKLIST_H_
/*typedef struct student{
    int score;
    struct student* next;
}LinkList;*/
LinkList *create(int n){
    LinkList *head,*node,*end;
    head=(LinkList*)malloc(sizeof(LinkList));
    head->next = NULL;  //修改
    end=head;
    int i;
    for(i=0;i<n;i++){
    node=(LinkList*)malloc(sizeof(LinkList));
    node->next = NULL;  //修改
    printf("请输入数据:\n");
    scanf("%d",&node->score); //scanf("%d",node->score);修改
    end->next=node;
    end=node;
    }
    end->next=0;
    return head;
}
 
void change(LinkList *list,int n){
    LinkList *t=list;
    int i=0;
    while(i<n&&t!=0){
        t=t->next;
        i++;
    }
    if(t!=0){
        printf("请输入修改后的值:\n");
        scanf("%d",&t->score); 
    }else
        puts("节点不存在");
}
 
void Delete(LinkList *list,int n){//delete 是关键字,所以 d 改大写 Delete
    LinkList *t,*in;
    int i=0;
    t=list;
    while(t!=0&&i<n){
        in=t;
        t=t->next;
        i++;
    }
    if(t!=0){
        in->next=t->next;
        free(t);
    }else{
        puts("节点不存在");
    }
}
 
void insert(LinkList *list,int n){
    LinkList *t,*in;
    int i=0;
    t=list;
    while(t!=0&&i<n){
        t=t->next;
        i++;
    }
    if(t!=0){
        in=(LinkList*)malloc(sizeof(LinkList));
        puts("要插入的值");
        scanf("%d",&in->score);
        in->next=t->next;
        t->next=in;
    }else{
        puts("节点不存在");
    }
}
 
void puts_(const LinkList *list){
    const LinkList *t=list;
    while(t->next!=0){//while(t!=0) 修改
        t=t->next;
        printf("%-3d",t->score);
    }
}
#endif