迷惑链表1(高手指教指教吧)

#include<malloc.h>
#include<stdio.h>
typedef struct node
{
  int data;
  struct node *next;
}NODE;

NODE *create()/*才用后插入方式建立单链表,并返回一个指向链表表头的指针,建立空表*/
{
  NODE *head,*q,*p;
  char ch;
  int a;
  head=(NODE*)malloc(sizeof(NODE));
  q=head;
  ch='*';
  printf("/nInput the list:");
 
  while(ch!='?')      /*'ch'为是否建立新结点的标志,若'ch'为'?'则输入结束*/
  {
    scanf("%d",&a);
    p=(NODE*)malloc(sizeof(NODE));
    p->data=a;
    p->next=q;
    q=p;
    ch=getchar();
  }
  q->next=NULL;
  return(head);
}

main()
{
  NODE *a;
  a=create();
  printf("output the list:");
  a=a->next;
  while(a!=NULL)
  {
    printf("%d",a->data);
    a=a->next;
  }
}

这个程序编译通过了,但是执行输出链表出错提示说“0x0040018f”指令引用内存不能为“read”~~~网上咨询了 经过修改 下面

#include<malloc.h>
#include<stdio.h>
typedef struct node
{
 int data;
 struct node *next;
}NODE;

NODE *create()/*才用后插入方式建立单链表,并返回一个指向链表表头的指针,建立空表*/
{
 NODE *head,*q,*p;
 char ch;
 int a;
 head=(NODE*)malloc(sizeof(NODE));
 q=head=NULL;
 ch='*';
 printf("/nInput the list:");
 
 while(ch!='?')      /*'ch'为是否建立新结点的标志,若'ch'为'?'则输入结束*/
 {
  scanf("%d",&a);
  p=(NODE*)malloc(sizeof(NODE));
  p->data=a;
  p->next=q;
  q=p;
  ch=getchar();
 }
 //q->next=NULL;//这句话没有用,加上的话就把后边的节点都搞没了
 return(q);//应该返回p,head指针没有变过
}


main()
{
 NODE *a;
 a=create();
 printf("output the list:");
 a=a->next;
 while(a!=NULL)
 {
  printf("%d",a->data);
  a=a->next;
 }
}
改完可以运行了。哎,总算,搞定了,只是有些地方好像不怎么清晰。

又重新输一遍的原来的个代码 却可以运行

#include<malloc.h>
#include<stdio.h>
typedef struct node
{
 int data;
 struct node *next;
}NODE;

NODE *create()
{
 NODE *head,*p,*q;
 char ch;
 int a;
 head=(NODE*)malloc(sizeof(NODE));
 q=head;
 ch='*';
 printf("/nInput the list:");
 while(ch!='?')
 {
  scanf("%d",&a);
  p=(NODE*)malloc(sizeof(NODE));
  p->data=a;
  q->next=p;
  q=p;
  ch=getchar();
 }
 q->next=NULL;
 return(head);
}

main()
{
 NODE *a;
 a=create();
 printf("Output the list:");
 a=a->next;
 while(a!=NULL)
 {
  printf("%d",a->data);
  a=a->next;
 }
}
这里的q=head不需要为NULL,并且q->next=NULL应该为空的,return(head);返回头指针  这样理解应该没错的啊,但是还是没搞清楚最上面的那段代码哪儿不对了,而第二段代码的链表的最后一个的Next没有为空怎么说明那是链尾.......

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值