题目描述
输入一系列字符以#作为结束标志,用尾插法创建链表并存储数据,并输出链表数据.如果输入的只有结束符,则输出empty list
输入
第一行输入一个字符串,以#结束
例如输入:
abcde#
输出
链表所有数据,数据之间用空格分开
a b c d e
#include"stdio.h"
#include"stdlib.h"
typedef struct node{
char data;
struct node *next;
}Node;
// 创建链表函数
void creatList(Node * head);
// 输出链表函数
void output(Node *h);
int main()
{
Node *head =(Node*)malloc(sizeof(Node));
head->next= NULL;
// 尾插法创建链表
creatList( head);
// 输出链表
output(head);
return 0;
}
// 创建链表函数,通过尾插法
void creatList(Node * head)
{
Node *tail =head; // 定义尾指针初始指向头节点
char c;
while(scanf("%c",&c)&&c!='#') // 循环读取字符直到输入'#'
{
Node *newNode =(Node*)malloc(sizeof(Node)); // 创建新节点
newNode->data= c; // 设置新节点数据为读取的字符
newNode->next= NULL;
tail->next= newNode; // 将新节点添加到尾指针后
tail = newNode; // 更新尾指针为新节点
}
}
// 输出链表函数
void output(Node *h)
{
Node *p = h->next; // 从头节点的下一个节点开始
if(p==NULL) // 如果链表为空
{
printf("empty list");
}else{
while(p) // 遍历链表
{
printf("%c ",p->data); // 输出节点数据
p= p->next; // 移动到下一个节点
}
printf("\n");
}
}