设链表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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!