单链表头插法
[code=C/C++][/code]#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
#define overflow -2
#include<stdio.h>
#include<malloc.h>
typedef char ElemType;
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode * next;
} LNode,*LinkList;
void CreateList_HeadInsert(LinkList L)//头插法
{
//建立带表头结点的单链表线性表L.
LinkList p;
char ch;
ch=getchar();
while(ch!='\n')
{
p=(LinkList)malloc(sizeof(LNode));
p->data=ch;
p->next=L->next;//插入第一个结点的时候L->next为null;
L->next=p;
ch=getchar();
}
}
void InitList(LinkList L)//初始化,创建头结点;
{
L=(LinkList)malloc(sizeof(LNode));//头指针指向刚分配的地址;
L->next=NULL;//创建一个带头结点的单链表;
}
void main()
{
LinkList L;
InitList(L);//初始化单链表;
CreateList_HeadInsert(L);//头插法建单链表
// p=L->next;
while(L->next!=NULL)
{
printf("%c",L->next->data);
L=L->next;
}
}
请教哪里出错了,正常打印,然后打印完程序就崩溃了。
[解决办法]
void CreateList_HeadInsert(LinkList L)中
插入一个一个新的元素时 内存申请类型应该为p =(LNode)malloc(sizeof(LNode));
void InitList(LinkList L)//初始化,创建头结点;
{
L=(LinkList)malloc(sizeof(LNode));//头指针指向刚分配的地址;
L->next=NULL;//创建一个带头结点的单链表;
}
在这里,函数里面对L修改了,可是跳出函数后就没有作用了,所以要么申请内存在函数外,要么传入一个指向这个指针的指针的
void InitList(LinkList *L)//初始化,创建头结点;
{
(*L)=(LinkList)malloc(sizeof(LNode));//头指针指向刚分配的地址;
(*L)->next=NULL;//创建一个带头结点的单链表;
}