C语言链表问题:我输入1,2,3,4运行无限循环输出4,哪错了?

#include<stdio.h>#include<stdlib.h>intmain(){inti,x;typedefstructex{intnum;structex*n... #include<stdio.h>
#include<stdlib.h>
int main()
{
int i,x;
typedef struct ex
{
int num;
struct ex *next;
}ex;
ex *head,*tail;
head=(ex *)malloc(sizeof(ex));
if(head==NULL)
{
printf("error\n");
}
else
{
printf("success\n");
scanf("%d",&x);
head->num=x;
head->next=NULL;
tail=head;
}
for(i=0;i<3;i++)
{
tail=(ex *)malloc(sizeof(ex));
scanf("%d",&x);
head->next=tail;
tail->num=x;
}
while(tail!=NULL)
{
printf("%d\n",tail->num);
tail->next=tail;
}
}
展开
 我来答
丿艾瑞灬莉娅
2018-04-23 · TA获得超过916个赞
知道小有建树答主
回答量:926
采纳率:78%
帮助的人:429万
展开全部

逻辑错误很多,你看我代码里的注释吧

#include<stdio.h>
#include<stdlib.h>
int main() 
{
    int i,x;
    typedef struct ex 
    {
        int num;
        struct ex *next;
    }ex;
    ex *head, *tail, *p;    //    使用*p指向链表末尾 
    head = (ex*)malloc(sizeof(ex));
    if(head==NULL) {
        printf("error\n");
    } else {
        printf("success\n");
        scanf("%d",&x);
        head->num=x;
        head->next=NULL;
//        tail=head;
        p=head;
    }
    for(i=0; i<3; i++) {
        tail=(ex *)malloc(sizeof(ex));
        scanf("%d",&x);
        tail->num=x;
        tail->next=NULL;    //    新结点的指针域要设置为NULL,否则无法判断是否到了链表末尾 
//        head->next=tail;
        p->next=tail;        //    使用尾插法插入结点 
        p=p->next;            //    p始终指向链表末尾 
    }
    tail = head;            //    获取头结点 
    while(tail!=NULL) {
        printf("%d\n",tail->num);
        tail = tail->next;
//        tail->next=tail;
    }
    return 0;
}
zcy990718
2018-04-23 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1.2万
采纳率:66%
帮助的人:1532万
展开全部
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,x;
typedef struct ex
{
int num;
struct ex *next;
}ex;
ex *current,*tail,*lead;
lead=(ex *)malloc(sizeof(ex));
if(lead==NULL)
{
printf("error\n");
}
else
{
printf("success\n请输入整型数字:");
scanf("%d",&x);
lead->num=x;
lead->next=NULL;
}
current = lead;
for(i=0;i<3;i++)
{
tail=(ex *)malloc(sizeof(ex));
printf("请输入整型数字:");
scanf("%d",&x);
tail->num=x;
tail->next = NULL;
current->next = tail;
current = tail;
}
current = lead;
while(current->next != NULL)
{
printf("%d\n",current->num);
current = current->next;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飞向梦想飞向未来
2018-04-23 · TA获得超过179个赞
知道小有建树答主
回答量:230
采纳率:54%
帮助的人:37万
展开全部
最后面那个while有问题,你把tail赋值给next了,但是tail并未改变,所以一直进入死循环
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式