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

关于链表操作的有关问题

2012-03-05 
关于链表操作的问题#include stdio.htypedefintElemTypetypedefstructlnode{ElemTypeelementstructlno

关于链表操作的问题
#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

程序就可以正常运行了 ~

热点排行