2 qq 34378013 qq_34378013 于 2016.03.23 18:23 提问

新手关于链表问题求助
#include<stdio.h>
#include<stdlib.h>


typedef struct node
{
    int num;
    struct node *next;
}LN;


LN *Creat();
LN Divide(LN *h);
void Printf(LN *s);


void main()
{
    LN *h;
    h=Creat();
    Divide(h);
    printf("The even term is:  ");
    Printf(h);
    printf("The odd term is:  ");
    Printf(q);
}


LN *Creat()
{
    LN *p;
    LN *b;
    LN *h;
    int a;
    h=(LN *)malloc(sizeof(LN));
    h->next=NULL;
    b=h;
    printf("Input the sum of the numbers:  ");
    scanf("%d",&a);
    for(int i=0;i<a;i++)
    {
        printf("Input the %d number: ",i+1);
        p=(LN *)malloc(sizeof(LN));
        scanf("%d",&p->num);
        b->next=p;
        b=p;
    }
    p->next=NULL;
    system("CLS");
    return h;
}


LN Divide(LN *h)
{
    LN *q;
    LN *b;
    q=(LN *)malloc(sizeof(LN));
    b=q;
    while(h!=NULL&&h->next!=NULL)
    {
        b=h->next;
        h->next=b->next;
        h=h->next;
    }
    return *q;
}

void Printf(LN *s)
{
    LN *p;
    p=s->next;
    while(p)
    {
        printf("%d  ",p->num);
        p=p->next;
    }
}

**在Divide这个函数里面我有两个链表,如代码所示,我已经返回头指针q,可是为什么程序还是运行不了?简而言之就是我的q怎么传出来,我明明已经传出来了,在主函数里面又要由什么接应他。
**

3个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.23 20:40
已采纳

Divide函数应该返回一个指针,然后在main函数里接收该指针地址,而且Divide函数里本身也有点问题,我已经改了,楼主可以看一下

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


typedef struct node
{
    int num;
    struct node *next;
}LN;


LN *Creat();
LN *Divide(LN *h);
void Printf(LN *s);


void main()
{
    LN *h;
    h=Creat();
    LN *q = Divide(h);
    printf("The even term is:  ");
    Printf(h);
    printf("The odd term is:  ");
    Printf(q);
}


LN *Creat()
{
    LN *p;
    LN *b;
    LN *h;
    int a;
    h=(LN *)malloc(sizeof(LN));
    h->next=NULL;
    b=h;
    printf("Input the sum of the numbers:  ");
    scanf("%d",&a);
    for(int i=0;i<a;i++)
    {
        printf("Input the %d number: ",i+1);
        p=(LN *)malloc(sizeof(LN));
        scanf("%d",&p->num);
        b->next=p;
        b=p;
    }
    p->next=NULL;
    system("CLS");
    return h;
}


LN *Divide(LN *h)
{
    LN *q;
    LN *b;
    q=(LN *)malloc(sizeof(LN));


    b=q;
    while(h!=NULL&&h->next!=NULL)
    {
        b->next=h->next;
        b=b->next;
        h->next=b->next;
        h=h->next;

    }
    return q;
}

void Printf(LN *s)
{
    LN *p;
    p=s->next;
    while(p)
    {
        printf("%d  ",p->num);
        p=p->next;
    }
}

图片说明

qq_34378013
qq_34378013 回复小灸舞: 太感谢了,我已经被这个问题困惑了一个晚上了,太谢谢了!
一年多之前 回复
qq423399099
qq423399099 回复qq_34378013: 哈哈,刚才没很仔细,Divide函数里return q;之前加一句:b->next = NULL;否则的话当元素个数是奇数的时候,b的next指针还会指着h的最后一个节点,所以会多输出一个数字,这里循环完要置为NULL
一年多之前 回复
qq_34378013
qq_34378013 我为什么在我电脑上运行完以后多了一个6 图见下面 太感谢高手了!!!
一年多之前 回复
bealing
bealing   Rxr 2016.03.23 18:38

创建俩表时,将头指针作为返回值传出来,然后在作为参数传递给Dvide()函数

qq_34378013
qq_34378013 谢谢
一年多之前 回复
qq_34378013
qq_34378013   2016.03.23 21:26

图片说明

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!