#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
建议注意本人的代码风格~注释应该少加,通过函数名和变量名来理解代码的逻辑