qq_18404993
Zijeak
采纳率66.7%
2018-11-25 05:13 浏览 617
已采纳

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

图片说明

 #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;


}

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2018-11-25 07:28

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

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

    #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 评论 复制链接分享
  • yjc87sdust 幽幽茶香 2018-11-25 07:55

    你这个问题太多了,你把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 评论 复制链接分享

相关推荐