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



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

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