编写程序,从键盘输入一行字符,且每个字符存入一个结点,调用函数输入顺序建立一个链表,然后输出并释放全部结点#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct List{
char ch;
List *next;
};
struct List *creat()
{
List *head,*p1,*p2;
char n;
int i=0;
head=NULL;
printf("输入字符串:\n");
n=getchar();
while(n!='\n');
{
p1=(List *)malloc(sizeof(List));
p1->ch=n;
if(i==0)
{
i++;
head=p1;
}
else
p2->next=p1;
p2=p1;
n=getchar();
}
p2->next=NULL;
printf("字符串已完全存入链表\n");
return (head);
}
int main()
{
List *head,*p1,*p2;
char n;
head=creat();
printf("输入的字符串为:\n");
n=getchar();
free(p1);
return 0;
}
修改如下,供参考:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct List{
char ch;
List *next;
};
struct List *creat()
{
List *head,*p1,*p2;
char n;
int i=0;
head=NULL;
printf("输入字符串:\n");
//n=getchar();
while((n=getchar()) && n!='\n')//;
{
p1=(List *)malloc(sizeof(List));
p1->ch=n;
if(i==0)
{
i++;
head=p1;
}
else
p2->next=p1;
p2=p1;
//n=getchar();
}
p2->next=NULL;
printf("字符串已完全存入链表\n");
return (head);
}
void print(struct List *head)//输出链表
{
struct List *p;
if(head==NULL) return;
p = head;
while(p){
printf("%c ",p->ch);
p = p->next;
}
printf("\n");
}
void del(struct List *&head)//释放链表结点
{
if(head != NULL){
del(head->next);
free(head);
}
head = NULL;
}
int main()
{
List *head; //*p1,*p2;
//char n;
head=creat();
printf("输入的字符串为:\n");
print(head);
//n=getchar();
//free(p1);
printf("释放全部结点:\n");
del(head);
print(head);
return 0;
}