关于链表操作的问题
#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
程序就可以正常运行了 ~