【数据结构】指针和链表问题,求大佬解答

图片说明

问题
图片说明

 #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,*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)
    {
        //先插表LB 
        //尾插法 (正序) 
        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个回答

int Deal(LinkList LA,int n)
输入不要
吧。

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