首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

单链表头插法解决方案

2012-10-21 
单链表头插法[codeC/C++][/code]#define true 1#define false 0#define ok 1#define error 0#define infe

单链表头插法
[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;//创建一个带头结点的单链表;
}

热点排行