读书人

关于链表操作的有关问题

发布时间: 2012-03-05 11:54:02 作者: rapoo

关于链表操作的问题
#include <stdio.h>
typedef int ElemType;
typedef struct lnode{
ElemType element;
struct lnode *next;
}lnode, *LinkList;

LinkList head;

LinkList tolloc()
{
return (LinkList) malloc(sizeof(lnode));
}

int add(LinkList l,ElemType e)
{
LinkList s;
LinkList p=l;
if (p==NULL) {
p=tolloc();
p-> element = e;
p-> next = NULL;
return 0;
}
else {
while (p-> next != NULL) p=p-> next;
s=tolloc();
s-> element = e; s-> next = NULL;
p-> next = s;
return 0;
}
return -1;
}

void output(LinkList l)
{
LinkList p=l;
if (p!=NULL) printf( "%d\n ",p-> element);
while (p-> next!=NULL) {
p=p-> next;
printf( "%d\n ",p-> element);
}
}


main()
{
printf( "%p\n ",head);
add(head,10);
printf( "%p\n ",head);
output(head);

scanf( "\n ");
return 0;
}

add 函数没有起到我想要的作用
add 是将一个整数作为链表元素插入到该表最尾端~
执行的时候得到
00000000
00000000
后就报错了~

不知道是哪里有错……?望达人指点 呵呵

------解决方案--------------------


这么该吧:

int add(LinkList l,ElemType e)
{
LinkList s;
LinkList p=l;
if (p==NULL) {
p=tolloc();
p-> element = e;
p-> next = NULL;
head=p; //增加这个语句
return 0;
}
else {
while (p-> next != NULL) p=p-> next;
s=tolloc();
s-> element = e; s-> next = NULL;
p-> next = s;
return 0;
}
return -1;
}
[解决办法]
因为 原来的程序,
所有的节点都没有被连接到 head 上,
关键第一个 节点就出问题了 ~~

另外,
上面的修改还一个前提:
LinkList head=NULL; //定义的时候 初始化为 NULL

程序就可以正常运行了 ~

读书人网 >C语言

热点推荐