请教一道C的链表程序!

whyes 2003-09-24 09:13:52
这是一个输入数个整数,建立链表,直到输入的数字为-1时为止,并从表头至表尾依次输入链表的程序:
#include<stdio.h>
#include<stdlib.h>
main(){
typedef struct node{ /*定义节点*/
int data;
struct node *next;
}NODE;
NODE **head,*t;
int q;

while(1)
{
scanf("%d",&q);
if(q!=-1){
NODE *u;
u=(NODE*)(sizeof(NODE));
u->data=q;u->next=NULL;
if(*head==NULL) /*如果链表为空,则以新节点为表头*/
{*head=u;}
else
{for(t=*head;t->next!=NULL;t=t->next); /*否则新节点插到表尾*/
t->=u;}
}
else break; /*接收数字为-1时跳出循环*/

}

for(t=*head;t->next!=NULL;t=t->next)printf("\n%d",t->data); /*依次输出链表中元素*/
}


----------------
输出时,总是进入死循环。
请高手指教!谢谢~!
...全文
38 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bugpro 2003-10-03
  • 打赏
  • 举报
回复
你快点结贴
whyes 2003-09-26
  • 打赏
  • 举报
回复
bugpro(Bird!) 第2个还是有问题,只是死循环没有了,但链表仍然不能完整的遍历:(
sontolee(松子) 说得很对,head这个指针问题很大。
谢谢各位!
6627627 2003-09-26
  • 打赏
  • 举报
回复
head有问题,不需要定义成指针的指针。详细情况希望高手解答!!!

#include<stdio.h>
#include<stdlib.h>
void main()
{
typedef struct node{ /*定义节点*/
int data;
struct node *next;
}NODE;
NODE *head=NULL,*t;
int q;

while(1)
{
scanf("%d",&q);
if(q!=-1){
NODE *u;
u=(NODE*)malloc(sizeof(NODE));
u->data=q;u->next=NULL;
if(head==NULL) /*如果链表为空,则以新节点为表头*/
{head=u;}
else
{for(t=head;t->next!=NULL;t=t->next); /*否则新节点插到表尾*/
t->next=u;}
}
else break; /*接收数字为-1时跳出循环*/

}

for(t=head;t!=NULL;t=t->next)printf("\n%d",t->data); /*依次输出链表中元素*/
}
yu5460 2003-09-26
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>

typedef struct node /*定义节点*/
{ int data;
struct node *next;
}NODE;

main()
{
NODE **head=NULL/*此处应为*head=NULL*/;
int q;

while(1)
{
scanf("%d",&q);
if(q!=-1)
{
NODE *u,*t;
u=(NODE*)malloc(sizeof(NODE));
u->data=q;u->next=NULL;
if(*head==NULL) {*head=u; t=*head;} /*如果链表为空,则以新节点为表头*/
else {t->next=u; t=u;} /*否则新节点插到表尾做了一些改动不知道对不对*/
}
else break; /*接收数字为-1时跳出循环*/
}
for(t=*head;t!=NULL;t=t->next) printf("\n%d",t->data); /*依次输出链表中元素*/
}
sontolee 2003-09-25
  • 打赏
  • 举报
回复
关于原程序

head你定义成指针的指针,在没有让head指向某一指针的情况下,
你就用了*head,显然这是错误的!

bugpro 2003-09-24
  • 打赏
  • 举报
回复
第2个是对的,第3个有问题
bugpro 2003-09-24
  • 打赏
  • 举报
回复
有错误!上面的修改为如下:
#include<stdio.h>
#include<stdlib.h>
main(){
typedef struct node{ /*定义节点*/
int data;
struct node *next;
}NODE;
NODE **head=NULL,*t;
int q;

while(1)
{
scanf("%d",&q);
if(q!=-1){
NODE *u;
u=(NODE*)malloc(sizeof(NODE));
u->data=q;u->next=NULL;
if(*head==NULL) /*如果链表为空,则以新节点为表头*/
{*head=u;}
else
{for(t=*head;t!=NULL;t=t->next); /*否则新节点插到表尾*/
t->next=u;}
}
else break; /*接收数字为-1时跳出循环*/

}

for(t=*head;t!=NULL;t=t->next)printf("\n%d",t->data); /*依次输出链表中元素*/
}
bugpro 2003-09-24
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
main(){
typedef struct node{ /*定义节点*/
int data;
struct node *next;
}NODE;
NODE **head=NULL,*t;
int q;

while(1)
{
scanf("%d",&q);
if(q!=-1){
NODE *u;
u=(NODE*)malloc(sizeof(NODE));
u->data=q;u->next=NULL;
if(*head==NULL) /*如果链表为空,则以新节点为表头*/
{*head=u;}
else
{for(t=*head;t->next!=NULL;t=t->next); /*否则新节点插到表尾*/
t->next=u;}
}
else break; /*接收数字为-1时跳出循环*/

}

for(t=*head;t!=NULL;t=t->next)printf("\n%d",t->data); /*依次输出链表中元素*/
}

2,948

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧