【数据结构】求助:一个简单的单链表问题

图片说明

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

#define MAXSIZE 20

typedef int ElemType; 
typedef struct
{
    ElemType data;
    struct Node* next;
}Node,*LinkList;

int main()
{
    //建立单链表
    LinkList LA;
    *LA=(LinkList)malloc(sizeof(Node));
    *LA->next=NULL;
    Node *r,*s;
    int c;
    r=LA;
    int flag=1,count=0; 
    while(flag)
    {
        printf("Please input new node to the LinkList,node must be intatger,input q to quit:\n");
        scanf("%d",&c);
        if(c!="q")
        {
            s=(Node*)malloc(sizeof(Node));
            s->data=c;
            r->next=s;
            r=s;
            count++;
        }
        else
        {
            flag=0;
            r->next=NULL;
        }
    } 
    Deal(LA,count);

    //打印新生成的表
    printf("New LinkList is:\n");
    r=LA->next;
    while(r->next!=NULL)
    {
        printf("%5d",r->data);
    } 
    return 0;
}

int Deal(LinkList *LA,int n)//n为单链表长度,n为偶数 
{
    LinkList LB,LC;
    *LB=(LinkList)malloc(sizeof(Node));//建立头结点
    *LB->next=NULL;//建立空的单链表LB
    *LC=(LinkList)malloc(sizeof(Node));//建立头结点
    *LC->next=NULL;//建立空的单链表LC
    Node *p,*q,*r;
    int i;
    p=LA->next->next;//令指针p指向序号为偶数的元素 
    q=LA->next;//令指针q指向序号为奇数的元素 
    r=LB;//令指针r指向LB 
    s=LC;//令指针s指向LC 


    //插入LB的第一个元素 
    LB->next=p;
    q-next=p-next;
    p=p->next->next;
    while(p->next!=NULL&&q->next!=NULL)
    {
        //尾插法 
        s->next=q;
        LA=q->next;
        q=q->next->next;
        s=s->next; 

        //头插法 
        p->next=LB->next;
        LB->next=p; 
        p=p->next->next;
    }

    //合并LB/LC两表
    if(p->next==NULL)
    {
        p->next=LC->next;
        free(LC);
    }
    return 0;


}

程序无法通过编译,麻烦各位大神帮忙看一看那里出问题了

0

2个回答

不考虑运行,仅仅修改编译错误,如下:

如果运行还有问题,请点我回答左上角的采纳和向上的箭头,重新提问,我继续回答。

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

#define MAXSIZE 20

typedef int ElemType; 

typedef struct Node
{
    ElemType data;
    Node* next;
}*LinkList;

int Deal(LinkList *LA,int n);

int main()
{
    //建立单链表
    LinkList * LA = NULL;
    *LA=(LinkList)malloc(sizeof(Node));
    (*LA)->next=NULL;
    Node *r,*s;
    int c;
    r=*LA;
    int flag=1,count=0; 
    while(flag)
    {
        printf("Please input new node to the LinkList,node must be intatger,input q to quit:\n");
        scanf("%d",&c);
        if(c!='q')
        {
            s=(Node*)malloc(sizeof(Node));
            s->data=c;
            r->next=s;
            r=s;
            count++;
        }
        else
        {
            flag=0;
            r->next=NULL;
        }
    } 
    Deal(LA,count);

    //打印新生成的表
    printf("New LinkList is:\n");
    r=(*LA)->next;
    while(r->next!=NULL)
    {
        printf("%5d",r->data);
    } 
    return 0;
}

int Deal(LinkList *LA,int n)//n为单链表长度,n为偶数 
{
    LinkList *LB,*LC;
    *LB=(LinkList)malloc(sizeof(Node));//建立头结点
    (*LB)->next=NULL;//建立空的单链表LB
    *LC=(LinkList)malloc(sizeof(Node));//建立头结点
    (*LC)->next=NULL;//建立空的单链表LC
    Node *p,*q,*r,*s;
    int i;
    p=(*LA)->next->next;//令指针p指向序号为偶数的元素 
    q=(*LA)->next;//令指针q指向序号为奇数的元素 
    r=*LB;//令指针r指向LB 
    s=*LC;//令指针s指向LC 


    //插入LB的第一个元素 
    (*LB)->next=p;
    q->next=p->next;
    p=p->next->next;
    while(p->next!=NULL&&q->next!=NULL)
    {
        //尾插法 
        s->next=q;
        *LA=q->next;
        q=q->next->next;
        s=s->next; 

        //头插法 
        p->next=(*LB)->next;
        (*LB)->next=p; 
        p=p->next->next;
    }

    //合并LB/LC两表
    if(p->next==NULL)
    {
        p->next=(*LC)->next;
        free(LC);
    }
    return 0;


}


1
qq_18404993
Zijeak 求大佬指点
9 个月之前 回复
qq_18404993
Zijeak 现在程序已编译通过,但无法运行,一运行就崩溃,连输入提示符都没出现
9 个月之前 回复
qq_18404993
Zijeak 为什么还有好多undeclared(first use in this function)的错误
9 个月之前 回复

你这个问题太多了,你把Deal函数在main之后定义了,就需要在main之前进行声明一下,否则main里面调用时无法识别;LB本身就是一个指针,malloc返回的是开辟内存的地址,而且你也转为LinkList类型了,LB前面就不应该再加“*”;*LB->next=NULL;这行的“*”也去掉;同理下两行的LC前面的*去掉,好多啊,不一一说了,附上正确编译通过代码,望采纳^_^
#define MAXSIZE 20

typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node* next;
}*LinkList;

int Deal(LinkList LA, int n);//n为单链表长度,n为偶数

int main()
{
//建立单链表
LinkList LA;
LA = (LinkList)malloc(sizeof(Node));
LA->next = NULL;
Node r, *s;
int c;
r = LA;
int flag = 1, count = 0;
while (flag)
{
printf("Please input new node to the LinkList,node must be intatger,input q to quit:\n");
scanf_s("%d", &c);
if (c != 'q')
{
s = (Node
)malloc(sizeof(Node));
s->data = c;
r->next = s;
r = s;
count++;
}
else
{
flag = 0;
r->next = NULL;
}
}
Deal(LA, count);

//打印新生成的表
printf("New LinkList is:\n");
r = LA->next;
while (r->next != NULL)
{
    printf("%5d", r->data);
}

return 0;

}

int Deal(LinkList LA, int n)//n为单链表长度,n为偶数
{
LinkList LB, LC;
LB = (LinkList)malloc(sizeof(Node));//建立头结点
LB->next = NULL;//建立空的单链表LB
LC = (LinkList)malloc(sizeof(Node));//建立头结点
LC->next = NULL;//建立空的单链表LC
Node *p, *q, *r, *s;
int i;
p = (LA->next->next);//令指针p指向序号为偶数的元素
q = LA->next;//令指针q指向序号为奇数的元素
r = LB;//令指针r指向LB
s = LC;//令指针s指向LC

       //插入LB的第一个元素 
LB->next = p;
q->next = p->next;
p = p->next->next;
while (p->next != NULL&&q->next != NULL)
{
    //尾插法 
    s->next = q;
    LA = q->next;
    q = q->next->next;
    s = s->next;

    //头插法 
    p->next = LB->next;
    LB->next = p;
    p = p->next->next;
}

//合并LB/LC两表
if (p->next == NULL)
{
    p->next = LC->next;
    free(LC);
}
return 0;

}

1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!