单链表的创建、初始化、头插法出不来答案,应该是指针乱了。我是初学者,应该是低级错误!
#代码如下
#include <stdio.h>
#include <stdlib.h>
typedef struct Node //结构体,表示出单链表每个节点的内容,用以定义出单链表//
{
int data; //定义节点的数据域//
struct Node *next; //定义节点的指针域,该指针变量类型为结构体类型 //
}Node,*LinkList; //结构体别名Node,定义一个指针变量LinkList指向结构体//
/*初始化单链表*/
void InitList(LinkList *L) //*L是空链表指针变量,代表空链表//
{
*L = (Node *)malloc(sizeof(Node)); //建立头节点,内存空间是节点结构体定义出的内存空间//
(*L)->next = NULL; //空链表//
}
/*头插法*/
void HeadInsert(LinkList L) //L是带头结点的空链表头指针//
{
Node *s;
char c;
int flag = 1;
while(flag = 1)
{
c = getchar();
if(c!='$')
{
s = (Node *)malloc(sizeof(Node)); //建立新节点s//
s->data = c;
s->next = L->next;
L->next = s;
}
else
flag = 0;
}
}
/*输出链表*/
void PrintList(LinkList L)
{
LinkList p;
p=L->next;
printf("链表元素如下:\n");
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
printf("\n");
}
}
int main()
{
LinkList *L; //建立一个空链表//
InitList(L); //初始化此空链表//
HeadInsert(*L);
PrintList(*L);
return 0;
}
运行结果及报错内容
出来是空的。
请问如何正确运行
while(flag = 1)
改为
while(flag == 1)
主函数也有问题,不要定义linklist的指针,修改如下
#include <stdio.h>
#include <stdlib.h>
typedef struct Node //结构体,表示出单链表每个节点的内容,用以定义出单链表//
{
int data; //定义节点的数据域//
struct Node *next; //定义节点的指针域,该指针变量类型为结构体类型 //
}Node,*LinkList; //结构体别名Node,定义一个指针变量LinkList指向结构体//
/*初始化单链表*/
void InitList(LinkList *L) //*L是空链表指针变量,代表空链表//
{
*L = (Node *)malloc(sizeof(Node)); //建立头节点,内存空间是节点结构体定义出的内存空间//
(*L)->next = NULL; //空链表//
}
/*头插法*/
void HeadInsert(LinkList L) //L是带头结点的空链表头指针//
{
Node *s;
char c;
int flag = 1;
while(flag == 1)
{
c = getchar();
if(c!='$')
{
s = (Node *)malloc(sizeof(Node)); //建立新节点s//
s->data = c;
s->next = L->next;
L->next = s;
}
else
flag = 0;
}
}
/*输出链表*/
void PrintList(LinkList L)
{
LinkList p;
p=L->next;
printf("链表元素如下:\n");
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
printf("\n");
}
}
int main()
{
LinkList L; //建立一个空链表//
InitList(&L); //初始化此空链表//
HeadInsert(L);
PrintList(L);
return 0;
}