| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 510 人关注过本帖
标题:链表问题,请大师指教
只看楼主 加入收藏
ericj2ee
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2011-4-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
链表问题,请大师指教
#include <stdio.h>
#include <stdlib.h>

typedef struct node{
   int data;
   struct node *next;
}LNode,*LinkList;

void initList(LinkList l){
   l=(LinkList)malloc(sizeof(LNode));
   if(!l){
      printf("list init fail\n");
      exit(1);
   }else{
      l->next=NULL;
      printf("list init scucess!\n");
   }
}

void createList(LinkList l,int n){
   LinkList p;
   int i;
   for(i=1;i<=n;i++){
      p=(LinkList)malloc(sizeof(LNode));
      if(!p){
    printf("list create fail\n");
    exit(1);
      }
      p->data=i;
      p->next=l->next;
      l->next=p;
      printf("put data:%d\n",i);
   }
   p->next=NULL;
   printf("list create scucess!,number is %d.\n",i);
}

void destroyList(LinkList l){
   LinkList p;
   while(l!=NULL){
       p=l;
       l=l->next;
       if(p!=NULL){
     free(p);
       }
   }
}

void printList(LinkList l){
   LinkList p=l->next;
   int i=0;
   int data=0;
   while(p!=NULL){
     data=p->data;
     p=p->next;

     if((++i)==1){
    printf("list:\t%d\t",data);
     }else{
    printf("%d\t",data);
     }
   }
   printf("cycile %d\n",i);
}

main()
{
  LinkList l;
  clrscr();
  initList(l);
  createList(l,10);
  printList(l);
  destroyList(l);
}


问题:
1、printList函数的输出为:10 9 8 7 6 5 4 3 2 1 0 0 ,为什么输出多了两个0
2、destroyList函数执行的时候直接输出:Null pointer assignment

请大师指点为什么会出现这种情况
搜索更多相关主题的帖子: include create 
2011-04-01 16:48
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:8 
帮你粗略改了下,仅供参考:

#include <stdio.h>
#include <stdlib.h>

typedef struct node{
   int data;
   struct node *next;
}LNode,*LinkList;

void initList(struct node **l){   //注意看形参数
   *l=(LinkList)malloc(sizeof(LNode));
   if(!l){
      printf("list init fail\n");
      exit(1);
   }else{
      (*l)->next=NULL;
      printf("list init scucess!\n");
   }
}

void createList(struct node **l,int n){
   LinkList p;
   int i;
   for(i=1;i<=n;i++){
      p=(LinkList)malloc(sizeof(LNode));
      if(!p){
          printf("list create fail\n");
          exit(1);
      }
      p->data=i;
      p->next=(*l)->next;
      (*l)->next=p;
      printf("put data:%d\n",i);
   }//屁股后面不用再加p->next=NULL了,因为第一次就是p->next=NULL,如果加了,会使(*l)->next->next=NULL
   printf("list create scucess!,number is %d.\n",i);
}

void destroyList(struct node **l){
   LinkList p;
   while((*l)!=NULL)
   {
       p=*l;
       *l=(*l)->next;
       if(p!=NULL) free(p);
   }
}

void printList(LinkList l){
   LinkList p;
   p=l->next;
   int i=0;
   int data=0;
   while(p!=NULL){
     data=p->data;
     p=p->next;

     if((++i)==1){
    printf("list:\t%d\t",data);
     }else{
    printf("%d\t",data);
     }
   }
   printf("cycile %d\n",i);
}

int main()
{
  LinkList l;
  system("cls");
  initList(&l);
  createList(&l,10);
  printList(l);
  destroyList(&l);
  system("pause");
  return 0;
}

我的地盘
2011-04-01 17:38
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:2 
具体是哪里错了  那里运行不过去?

要不我给你个拿去看看吧  也许对你有帮助
链表类_C语言.rar (1.71 KB)

                                         
===========深入<----------------->浅出============
2011-04-01 18:40
ericj2ee
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2011-4-1
收藏
得分:0 
谢谢hnuhsg1226的解答及laoyang103的列子。
hnuhsg1226的代码运行后list:9 8 7 6 5 4 3 2 1 0,而不是想要的结果 list:10 9 8 7 6 5 4 3 2 1
我现在学习主要是要考试,精力放在C上,laoyang103的列子是C++的,所以就没有去看了

还请各位继续给力指点!
2011-04-02 08:39
给力芬2010
Rank: 2
等 级:论坛游民
帖 子:48
专家分:71
注 册:2011-3-17
收藏
得分:10 

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
   int data;
   struct node *next;
}LNode,*LinkList;

void initList(struct node **q)
{
   *q=(LinkList)malloc(sizeof(LNode));
   if(!q)
   {
      printf("list init fail\n");
      exit(1);
   }
   else
   {
      (*q)->next=NULL;
      printf("list init scucess!\n");
   }
}

void createList(struct node **q,int n)
{
   LinkList p;
   int i;
   for(i=1;i<=n;i++)
   {
      p=(LinkList)malloc(sizeof(LNode));
      if(!p)
      {
          printf("list create fail\n");
          exit(1);
      }
      p->data=i;
      p->next=(*q)->next;
      (*q)->next=p;
      printf("put data:%d\n",i);
   }
   printf("list create scucess!,number is %d.\n",i);
}

void destroyList(struct node **q)
{
   LinkList p;
   while((*q)!=NULL)
   {
       p=*q;
       *q=(*q)->next;
       if(p!=NULL) free(p);
   }
}
void printList(LinkList q)
{
   LinkList p;
      int i=0;
         int data=0;
   p=q->next;
   while(p!=NULL)
   {
     data=p->data;
     p=p->next;
     if((++i)==1)
     {
    printf("list:%d  ",data);
     }
     else
     {
    printf("%d  ",data);
     }
   }
   printf("\ncycile %d\n",i);
}
main()
{
  LinkList q;
  initList(&q);
  createList(&q,10);
  printList(q);
  destroyList(&q);
}
2011-04-02 10:00
ericj2ee
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2011-4-1
收藏
得分:0 
void initList(struct node **q)
{
   *q=(LinkList)malloc(sizeof(LNode));
   if(!q)
   {
      printf("list init fail\n");
      exit(1);
   }
   else
   {
      (*q)->next=NULL;
      printf("list init scucess!\n");
   }
}

和void initList(LinkList l){
   l=(LinkList)malloc(sizeof(LNode));
   if(!l){
      printf("list init fail\n");
      exit(1);
   }else{
      l->next=NULL;
      printf("list init scucess!\n");
   }
}
有什么区别?
2011-04-02 14:42
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:0 
不是吧,我的结果正确啊,是10 9 8 7 6 5 4 3 2 1,绝对没0的

我的地盘
2011-04-02 21:42
huiming
Rank: 2
等 级:论坛游民
帖 子:31
专家分:36
注 册:2010-4-8
收藏
得分:0 
tc 下没出错
2011-04-02 23:25
快速回复:链表问题,请大师指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027468 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved