#include <malloc.h>
#define NULL 0
typedef struct node{
char data;
struct node* next;
}NODE;
NODE* create(int n)
{
NODE *head,*p,*q;
if(n == 0)
{
return NULL;
}
else
{
head = (NODE*)malloc(sizeof(NODE));
p = head;
for(int i = 0; i < n; i++)
{
printf("请输入第%d个链表结点的内容:",i+1);
scanf("%c\n",&(p->data));
if(i==(n-1))
{
p->next = NULL;
break;
}
else
{
q = (NODE*)malloc(sizeof(NODE));
p->next = q;
p = q;
}
}
return head;
}
}
main()
{
int n;
NODE *head,*p;
head = (NODE*)malloc(sizeof(NODE));
printf("\n请输入链表的长度:");
scanf("%d",&n);
head = create(n);
if(head == NULL)
printf("空链表!\n");
else
{
p = head;
printf("\n生成的链表为:");
p = (NODE*)malloc(sizeof(NODE));
p = head;
for(int i = 0; i < n; i++)
{
printf("%c",p->data);
if(i!=(n-1) && i>0)
{
p = p->next;
printf("->");
}
}
}
return 0;
}
我的问题是:为什么第一次输入的结点的内容不保存在head->data中
运行起来后总是少显示一个结点
比如n=5,就只出来4个
看了好半天也没弄明白哪出问题了,请帮忙看看
5 个解决方案
#1
printf("请输入第%d个链表结点的内容:",i+1);
/*在这后面加上下面一条语句,因为输入流里面还有数据,所以再次读的时候要清空*/
fflush(stdin);
/*在这后面加上下面一条语句,因为输入流里面还有数据,所以再次读的时候要清空*/
fflush(stdin);
#2
加上之后为什么总要输入两次回车才能结束啊
#3
还有这个if(i!=(n-1) && i>0)
改为if(i!=(n-1) && i>=0)
改为if(i!=(n-1) && i>=0)
#4
嗯,已经修改完毕
把正确的贴上:
#include <stdio.h>
#include <malloc.h>
#define NULL 0
typedef struct node{
char data;
struct node* next;
}NODE;
NODE* create(int n)
{
NODE *head,*p,*q;
if(n == 0)
{
return NULL;
}
else
{
p = (NODE*)malloc(sizeof(NODE));
head = p;
for(int i = 0; i < n; i++)
{
printf("ÇëÊäÈëµÚ%d¸öÁ´±íÔªËصÄÄÚÈÝ:",i+1);
fflush(stdin);
scanf("%c",&(p->data));
printf("ÄúÊäÈëµÄµÚ%d¸öÁ´±íÔªËصÄÄÚÈÝÊÇ:%c\n",i+1,p->data);
if(i==(n-1))
{
p->next = NULL;
break;
}
else
{
q = (NODE*)malloc(sizeof(NODE));
p->next = q;
p = q;
}
}
return head;
}
}
main()
{
//Á´±íµÄ³¤¶È£¬ÓÉÓû§ÊäÈë
int n;
//¶¨ÒåÈý¸öÁ´±í½áµãÖ¸Õë
NODE *head,*p;
head = (NODE*)malloc(sizeof(NODE));
printf("ÇëÊäÈëÁ´±íµÄ³¤¶È:");
scanf("%d",&n);
printf("\n");
head = create(n);
if(head == NULL)
printf("¿ÕÁ´±í!\n");
else
{
p = head;
printf("\nÉú³ÉµÄÁ´±íΪ:");
p = (NODE*)malloc(sizeof(NODE));
p = head;
for(int i = 0; i < n-1; i++)
{
printf("%c->",p->data);
p = p->next;
}
printf("%c",p->data);
}
return 0;
}
把正确的贴上:
#include <stdio.h>
#include <malloc.h>
#define NULL 0
typedef struct node{
char data;
struct node* next;
}NODE;
NODE* create(int n)
{
NODE *head,*p,*q;
if(n == 0)
{
return NULL;
}
else
{
p = (NODE*)malloc(sizeof(NODE));
head = p;
for(int i = 0; i < n; i++)
{
printf("ÇëÊäÈëµÚ%d¸öÁ´±íÔªËصÄÄÚÈÝ:",i+1);
fflush(stdin);
scanf("%c",&(p->data));
printf("ÄúÊäÈëµÄµÚ%d¸öÁ´±íÔªËصÄÄÚÈÝÊÇ:%c\n",i+1,p->data);
if(i==(n-1))
{
p->next = NULL;
break;
}
else
{
q = (NODE*)malloc(sizeof(NODE));
p->next = q;
p = q;
}
}
return head;
}
}
main()
{
//Á´±íµÄ³¤¶È£¬ÓÉÓû§ÊäÈë
int n;
//¶¨ÒåÈý¸öÁ´±í½áµãÖ¸Õë
NODE *head,*p;
head = (NODE*)malloc(sizeof(NODE));
printf("ÇëÊäÈëÁ´±íµÄ³¤¶È:");
scanf("%d",&n);
printf("\n");
head = create(n);
if(head == NULL)
printf("¿ÕÁ´±í!\n");
else
{
p = head;
printf("\nÉú³ÉµÄÁ´±íΪ:");
p = (NODE*)malloc(sizeof(NODE));
p = head;
for(int i = 0; i < n-1; i++)
{
printf("%c->",p->data);
p = p->next;
}
printf("%c",p->data);
}
return 0;
}
#5
你好,你的代码有不少不妥的地方,可以把以下我改过的代码试试,然后加以比较:
#include <stdio.h>
#include <malloc.h>
#define NULL 0
typedef struct node{
char data;
struct node* next;
}NODE;
NODE* create(int n)
{
NODE *head,*p,*q;
if(n == 0)
{
return NULL;
}
else
{
head = (NODE*)malloc(sizeof(NODE));
p = head;
for(int i = 0; i < n; i++)
{
printf("请输入第%d个链表结点的内容:",i+1);
scanf("\n%c",&(p->data)); /***此处更改*****/
if(i==(n-1))
{
p->next = NULL;
break;
}
else
{
q = (NODE*)malloc(sizeof(NODE));
p->next = q;
p = q;
}
}
return head;
}
}
main()
{
int n;
NODE *head,*p;
// head = (NODE*)malloc(sizeof(NODE)); /***此处更改****/
printf("\n请输入链表的长度:");
scanf("%d",&n);
head = create(n);
if(head == NULL)
printf("空链表!\n");
else
{
// p = head; /***此处更改*****/
printf("\n生成的链表为:");
// p = (NODE*)malloc(sizeof(NODE));/***此处更改*****/
p = head;
for(int i = 0; i < n; i++)
{
printf("%c",p->data);
if(i < n-1) /***此处更改*****/
{
p = p->next;
printf("->");
}
}
}
return 0;
}
另外,象这样在CREAT()里面申请了空间过后又不释放,是会消耗内存的,(!!!)只不过这个程序小,影响不大!
#include <stdio.h>
#include <malloc.h>
#define NULL 0
typedef struct node{
char data;
struct node* next;
}NODE;
NODE* create(int n)
{
NODE *head,*p,*q;
if(n == 0)
{
return NULL;
}
else
{
head = (NODE*)malloc(sizeof(NODE));
p = head;
for(int i = 0; i < n; i++)
{
printf("请输入第%d个链表结点的内容:",i+1);
scanf("\n%c",&(p->data)); /***此处更改*****/
if(i==(n-1))
{
p->next = NULL;
break;
}
else
{
q = (NODE*)malloc(sizeof(NODE));
p->next = q;
p = q;
}
}
return head;
}
}
main()
{
int n;
NODE *head,*p;
// head = (NODE*)malloc(sizeof(NODE)); /***此处更改****/
printf("\n请输入链表的长度:");
scanf("%d",&n);
head = create(n);
if(head == NULL)
printf("空链表!\n");
else
{
// p = head; /***此处更改*****/
printf("\n生成的链表为:");
// p = (NODE*)malloc(sizeof(NODE));/***此处更改*****/
p = head;
for(int i = 0; i < n; i++)
{
printf("%c",p->data);
if(i < n-1) /***此处更改*****/
{
p = p->next;
printf("->");
}
}
}
return 0;
}
另外,象这样在CREAT()里面申请了空间过后又不释放,是会消耗内存的,(!!!)只不过这个程序小,影响不大!
#1
printf("请输入第%d个链表结点的内容:",i+1);
/*在这后面加上下面一条语句,因为输入流里面还有数据,所以再次读的时候要清空*/
fflush(stdin);
/*在这后面加上下面一条语句,因为输入流里面还有数据,所以再次读的时候要清空*/
fflush(stdin);
#2
加上之后为什么总要输入两次回车才能结束啊
#3
还有这个if(i!=(n-1) && i>0)
改为if(i!=(n-1) && i>=0)
改为if(i!=(n-1) && i>=0)
#4
嗯,已经修改完毕
把正确的贴上:
#include <stdio.h>
#include <malloc.h>
#define NULL 0
typedef struct node{
char data;
struct node* next;
}NODE;
NODE* create(int n)
{
NODE *head,*p,*q;
if(n == 0)
{
return NULL;
}
else
{
p = (NODE*)malloc(sizeof(NODE));
head = p;
for(int i = 0; i < n; i++)
{
printf("ÇëÊäÈëµÚ%d¸öÁ´±íÔªËصÄÄÚÈÝ:",i+1);
fflush(stdin);
scanf("%c",&(p->data));
printf("ÄúÊäÈëµÄµÚ%d¸öÁ´±íÔªËصÄÄÚÈÝÊÇ:%c\n",i+1,p->data);
if(i==(n-1))
{
p->next = NULL;
break;
}
else
{
q = (NODE*)malloc(sizeof(NODE));
p->next = q;
p = q;
}
}
return head;
}
}
main()
{
//Á´±íµÄ³¤¶È£¬ÓÉÓû§ÊäÈë
int n;
//¶¨ÒåÈý¸öÁ´±í½áµãÖ¸Õë
NODE *head,*p;
head = (NODE*)malloc(sizeof(NODE));
printf("ÇëÊäÈëÁ´±íµÄ³¤¶È:");
scanf("%d",&n);
printf("\n");
head = create(n);
if(head == NULL)
printf("¿ÕÁ´±í!\n");
else
{
p = head;
printf("\nÉú³ÉµÄÁ´±íΪ:");
p = (NODE*)malloc(sizeof(NODE));
p = head;
for(int i = 0; i < n-1; i++)
{
printf("%c->",p->data);
p = p->next;
}
printf("%c",p->data);
}
return 0;
}
把正确的贴上:
#include <stdio.h>
#include <malloc.h>
#define NULL 0
typedef struct node{
char data;
struct node* next;
}NODE;
NODE* create(int n)
{
NODE *head,*p,*q;
if(n == 0)
{
return NULL;
}
else
{
p = (NODE*)malloc(sizeof(NODE));
head = p;
for(int i = 0; i < n; i++)
{
printf("ÇëÊäÈëµÚ%d¸öÁ´±íÔªËصÄÄÚÈÝ:",i+1);
fflush(stdin);
scanf("%c",&(p->data));
printf("ÄúÊäÈëµÄµÚ%d¸öÁ´±íÔªËصÄÄÚÈÝÊÇ:%c\n",i+1,p->data);
if(i==(n-1))
{
p->next = NULL;
break;
}
else
{
q = (NODE*)malloc(sizeof(NODE));
p->next = q;
p = q;
}
}
return head;
}
}
main()
{
//Á´±íµÄ³¤¶È£¬ÓÉÓû§ÊäÈë
int n;
//¶¨ÒåÈý¸öÁ´±í½áµãÖ¸Õë
NODE *head,*p;
head = (NODE*)malloc(sizeof(NODE));
printf("ÇëÊäÈëÁ´±íµÄ³¤¶È:");
scanf("%d",&n);
printf("\n");
head = create(n);
if(head == NULL)
printf("¿ÕÁ´±í!\n");
else
{
p = head;
printf("\nÉú³ÉµÄÁ´±íΪ:");
p = (NODE*)malloc(sizeof(NODE));
p = head;
for(int i = 0; i < n-1; i++)
{
printf("%c->",p->data);
p = p->next;
}
printf("%c",p->data);
}
return 0;
}
#5
你好,你的代码有不少不妥的地方,可以把以下我改过的代码试试,然后加以比较:
#include <stdio.h>
#include <malloc.h>
#define NULL 0
typedef struct node{
char data;
struct node* next;
}NODE;
NODE* create(int n)
{
NODE *head,*p,*q;
if(n == 0)
{
return NULL;
}
else
{
head = (NODE*)malloc(sizeof(NODE));
p = head;
for(int i = 0; i < n; i++)
{
printf("请输入第%d个链表结点的内容:",i+1);
scanf("\n%c",&(p->data)); /***此处更改*****/
if(i==(n-1))
{
p->next = NULL;
break;
}
else
{
q = (NODE*)malloc(sizeof(NODE));
p->next = q;
p = q;
}
}
return head;
}
}
main()
{
int n;
NODE *head,*p;
// head = (NODE*)malloc(sizeof(NODE)); /***此处更改****/
printf("\n请输入链表的长度:");
scanf("%d",&n);
head = create(n);
if(head == NULL)
printf("空链表!\n");
else
{
// p = head; /***此处更改*****/
printf("\n生成的链表为:");
// p = (NODE*)malloc(sizeof(NODE));/***此处更改*****/
p = head;
for(int i = 0; i < n; i++)
{
printf("%c",p->data);
if(i < n-1) /***此处更改*****/
{
p = p->next;
printf("->");
}
}
}
return 0;
}
另外,象这样在CREAT()里面申请了空间过后又不释放,是会消耗内存的,(!!!)只不过这个程序小,影响不大!
#include <stdio.h>
#include <malloc.h>
#define NULL 0
typedef struct node{
char data;
struct node* next;
}NODE;
NODE* create(int n)
{
NODE *head,*p,*q;
if(n == 0)
{
return NULL;
}
else
{
head = (NODE*)malloc(sizeof(NODE));
p = head;
for(int i = 0; i < n; i++)
{
printf("请输入第%d个链表结点的内容:",i+1);
scanf("\n%c",&(p->data)); /***此处更改*****/
if(i==(n-1))
{
p->next = NULL;
break;
}
else
{
q = (NODE*)malloc(sizeof(NODE));
p->next = q;
p = q;
}
}
return head;
}
}
main()
{
int n;
NODE *head,*p;
// head = (NODE*)malloc(sizeof(NODE)); /***此处更改****/
printf("\n请输入链表的长度:");
scanf("%d",&n);
head = create(n);
if(head == NULL)
printf("空链表!\n");
else
{
// p = head; /***此处更改*****/
printf("\n生成的链表为:");
// p = (NODE*)malloc(sizeof(NODE));/***此处更改*****/
p = head;
for(int i = 0; i < n; i++)
{
printf("%c",p->data);
if(i < n-1) /***此处更改*****/
{
p = p->next;
printf("->");
}
}
}
return 0;
}
另外,象这样在CREAT()里面申请了空间过后又不释放,是会消耗内存的,(!!!)只不过这个程序小,影响不大!