如何定义?
typedef struct node{
char *name;
struct node *next;
}Node;
ps:在定义结构体的时候,结构体里面的变量必须是能够明确确定内存空间的。
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
char *name;
struct node *next;
}Node;
void myFree(Node *pHead){
while (pHead != NULL) {
//保存下一个结点的地址
Node *pTemp = pHead->next;
//首先释放name对应的内存空间
free(pHead->name);
//再释放结点本身
free(pHead);
//pHead指向下一个
pHead = pTemp;
}
}
int main(int argc, const char * argv[]) {
Node *pHead = NULL;
Node *pTail = NULL;
for (int i = 0; i < 3; i++) {
int total = 0;
//创建一个新的结点
Node *pTemp = (Node *)malloc(1 * sizeof(Node));
if (pTemp == NULL) {
//分配失败
myFree(pHead);
exit(EXIT_FAILURE);
}
//提示用户输入
//为name分配内存空间
printf("请输入姓名:");
char character;
while (1) {
//获取一个字符
character = getchar();
//判断是不是回车键
if (character == ' ') {
break;
}else{
//保存
//是不是第一次分配内存
if (pTemp->name == NULL) {
//第一次
pTemp->name = (char *)malloc(1 * sizeof(char));
if (pTemp->name == NULL) {
exit(EXIT_FAILURE);
}
}else{
pTemp->name = (char *)realloc(pTemp->name, (total+1)*sizeof(char));
if (pTemp->name == NULL) {
exit(EXIT_FAILURE);
}
}
pTemp->name[total] = character;
total ++;
}
}
//为这个结点的next指针赋初值
pTemp->next = NULL;
//判断加载头结点还是尾结点
if (pHead == NULL) {
//头结点
pHead = pTemp;
pTail = pTemp;
}else{
//不是头结点
pTail->next = pTemp;
pTail = pTemp;
}
}
//输出结果
Node *pTemp = pHead;
while (pTemp != NULL) {
printf("%s ",pTemp->name);
pTemp = pTemp->next;
}
printf(" ");
return 0;
}