#include<stdio.h> #include<stdlib.h> /************************************/ /* 链表实现的头文件,文件名slnklist.h */ /************************************/ typedef int datatype; typedef struct link_node { int info; struct link_node *next; }node; node *creatlink(node *head,int n) { node *q; node *p=head;int i; for(i=0;i<n;i++) { q=(node*)malloc(sizeof(node));/*分配空间*/ printf("\n请输入链表的结点值:"); scanf("%d",q->info);/*设置新结点*/ if(!head) {/* 插入的结点作为单链表的第一个结点*/ q->next=head; head=q; } else { p->next=q; q->next=NULL; p=q; } } return head; } void main() { node *head; int n,i; printf("请输入链表的结点个数:"); scanf("%d",&n); creatlink(head,n); printf("--"); for(i=0;i<n;i++) { if(head) { printf("%d",head->info); head=head->next; } } }
解决方案
10
①main函数里的node *head改成 node *head=new node;
指针在用之前记得要初始化。
②creatlink函数中的:scanf(“%d”,q->info); 改成scanf(“%d”,&(q->info));
scanf要有取址符号,不然运行的时候会报错。
指针在用之前记得要初始化。
②creatlink函数中的:scanf(“%d”,q->info); 改成scanf(“%d”,&(q->info));
scanf要有取址符号,不然运行的时候会报错。
#include<stdio.h> #include<stdlib.h> /************************************/ /* 链表实现的头文件,文件名slnklist.h */ /************************************/ typedef int datatype; typedef struct link_node { int info; struct link_node *next; }node; node *creatlink(node *head,int n) { node *q; node *p=head;int i; for(i=0;i<n;i++) { q=(node*)malloc(sizeof(node));/*分配空间*/ printf("\n请输入链表的结点值:"); scanf("%d",&(q->info));/*设置新结点*/ printf("%d",q->info); if(!head) {/* 插入的结点作为单链表的第一个结点*/ q->next=head; head=q; } else { p->next=q; q->next=NULL; p=q; } } return head; } void main() { node *head=new node ; int n,i; printf("请输入链表的结点个数:"); scanf("%d",&n); creatlink(head,n); printf("--"); for(i=0;i<n;i++) { if(head) { printf("%d",head->info); head=head->next; } } }
25
#include<stdio.h> #include<stdlib.h> /************************************/ /* 链表实现的头文件,文件名slnklist.h */ /************************************/ typedef int datatype; typedef struct link_node { int info; struct link_node *next; }node; node *creatlink(node *head, int n) { node *p, *q; int i; p = head; for(i = 0; i < n; i++) { q = (node*)malloc(sizeof(node));/*分配空间*/ printf("\n请输入链表的结点值:"); scanf("%d", &q->info);/*这个地方是需要加&,原因是是要地址*/ if(!head) { /*这个地方需要传入的head是初始化为NULL,所以在main里要初始化*/ q->next = head; head = q; p = head; /*这句是需要的,不然下面else的p和head连不上*/ } else { q->next = NULL; p->next = q; p = q; } } return head; } void print_link(node *head) { node *pcur = head; while (pcur) { printf("%d\t", pcur->info); pcur = pcur->next; } putchar(10); } int main() { node *head = NULL; /* must initialize */ int n; printf("请输入链表的结点个数:"); scanf("%d", &n); head = creatlink(head, n); printf("--\n"); print_link(head); /*输出功能建议使用自定义函数,这样代码可读性增加,并且好维护*/ /* for(i=0;i<n;i++) { if(head) { printf("%d",head->info); head = head->next; } }*/ return 0; }
5
建议注意本人的代码风格~注释应该少加,通过函数名和变量名来理解代码的逻辑