关于##链表##的问题,如何解决?(数据结构)

设链表La中的数据元素递增有序,将 x 插入到链表的适当位置上,不改变该链表的有序性。
请补全如下代码

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode, *LinkList;
int DisplayList(LinkList La)//输出链表中的数据域的值
{
    if(La == NULL)
    {
        return -1;
    }
    
    LinkList p=La;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    return 1;
}
int create(LinkList *La) //    生成链表的函数定义,传入指向指针的指针
{
    int i;
    LinkList p=NULL,q=NULL;
    *La=NULL; // 使用指向指针的指针时,需要先将指针指向 NULL
    for(i=0;i<7;i++)
    {
        p=(LinkList)malloc(sizeof(LNode));
        p->data=13*i+68; //为结点的数据域赋值
        if(*La == NULL)
            *La=p;
        else
            q->next=p;
        q=p;        
    }
    if(*La != NULL)
    {
        q->next=NULL;
    }
    return 1;
}
int InSnode(LinkList *La)//插入结点的函数,传入指向指针的指针
{
    LinkList s,p,q;
    int a;
    
    scanf("%d",&a);
    s=(LinkList)malloc(sizeof(LNode));    //生成要插入的结点
    s->data=a;
    s->next=NULL;
    if(*La==NULL || a<(*La)->data)//寻找插入位置
    {
        //寻找插入位置并插入元素
        /***********Begin***********/


        /************End************/       
    }
    else
    {
        q=*La;
        p=q->next;
        //寻找插入位置并插入元素
        /***********Begin***********/


        /************End************/
        
        
    }
    return 1;
}
int main()
{
    LinkList La;
    create(&La); // 传入指向指针的指针
    DisplayList(La);
    InSnode(&La); // 传入指向指针的指针
    DisplayList(La);
    
    return 0;
}

样例1
输入:88
输出:
68 81 94 107 120 133 146
68 81 88 94 107 120 133 146

样例2
输入:145
输出:
68 81 94 107 120 133 146
68 81 94 107 120 133 145 146

遍历链表,找到比他大的节点,并插到该节点的前面即可。
代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode, *LinkList;
int DisplayList(LinkList La)//输出链表中的数据域的值
{
    if(La == NULL)
    {
        return -1;
    }

    LinkList p=La;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    return 1;
}
int create(LinkList *La) //    生成链表的函数定义,传入指向指针的指针
{
    int i;
    LinkList p=NULL,q=NULL;
    *La=NULL; // 使用指向指针的指针时,需要先将指针指向 NULL
    for(i=0;i<7;i++)
    {
        p=(LinkList)malloc(sizeof(LNode));
        p->data=13*i+68; //为结点的数据域赋值
        if(*La == NULL)
            *La=p;
        else
            q->next=p;
        q=p;        
    }
    if(*La != NULL)
    {
        q->next=NULL;
    }
    return 1;
}
int InSnode(LinkList *La)//插入结点的函数,传入指向指针的指针
{
    LinkList s,p,q;
    int a;

    scanf("%d",&a);
    s=(LinkList)malloc(sizeof(LNode));    //生成要插入的结点
    s->data=a;
    s->next=NULL;
    if(*La==NULL || a<(*La)->data)//寻找插入位置
    {
        //寻找插入位置并插入元素
        /***********Begin***********/
        s->next = *La;
        (*La) = s;
        /************End************/       
    }
    else
    {
        q=*La;
        p=q->next;
        //寻找插入位置并插入元素
        /***********Begin***********/
        while(p && p->data < s->data)
        {
            q = q->next;
            p = p->next;
        }
        s->next = p;
        q->next = s;


        /************End************/


    }
    return 1;
}
int main()
{
    LinkList La;
    create(&La); // 传入指向指针的指针
    DisplayList(La);
    InSnode(&La); // 传入指向指针的指针
    DisplayList(La);

    return 0;
}


您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632