如何创建单链表,满足元素按升序排列,输出该单链表,然后插入元素X保持升序,再输出新的单链表?

 我来答
申绮晴0fB
2018-02-02
知道答主
回答量:25
采纳率:100%
帮助的人:14.8万
展开全部
楼主你好,我写了一个程序,应该能满足你的上述要求,希望能帮到你的忙~!
#include<stdio.h>
#include<stdlib.h>
struct Node
{
int data;
struct Node *next;
};

void insert(struct Node *L,int x)//函数的功能是将x插入到链表L中的合适位置,使链表保持升序
{
struct Node *p = L->next,*p1 = L,*q;//p指向链表的第一个非头结点,p1指向其之前的结点
q = (struct Node *)malloc(sizeof(struct Node));//q指向一个新分配的结点
if (L->next == NULL) //链表为空,则将x作为第一个元素直接插入链表
{
L->next = q;
q->data = x;
q->next = NULL;
return ;
}
while(p && (p->data < x))//否则寻找适合x的插入位置
{
p1 = p;//p1保存的是p之前的结点
p = p->next;
}//循环结束后p指向一个空位置或首个大于x的结点
if (p)//若p没指向一个空位置
{
q->data = x;
p1->next = q;
q->next = p;
}
else
{
q->data = x;
p1->next = q;
q->next = NULL;
}
}
int main()
{
int num;
struct Node *L,*p;
L = (struct Node *)malloc(sizeof(struct Node));
L->next = NULL;
printf("开始创建单链表,请输入链表元素(正整数),输入-1代表结束:\n");

while(scanf("%d",&num) && (num != -1))
{
insert(L,num);
}
p = L->next;
printf("链表中的元素已排列插入完毕.所有的元素为\n");
while(p!=NULL)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式