/*
16.试设计一个算法,
使得在一个有序的单链表中插入一个元素后仍然有序。
*/
# include <iostream>
# include <stdlib.h>
# include <stdio.h>
using namespace std;
typedef struct Node
{
int elem;
struct Node *next;
}*linklist;
void inlinklist(linklist &l, int n)
{
l = (linklist) malloc (sizeof(Node));
l->next = NULL;
linklist p, end;
end = l;
printf("请输入链表中的元素:\n");
for(int i = 0; i<n; i++)
{
p = (linklist) malloc(sizeof(Node));
scanf("%d", &p->elem);
end->next = p;
p->next = NULL;
end = p;
}
}
void outlinklist(linklist l)
{
printf("链表中的元素为:\n");
linklist p;
p = l->next;
while(p)
{
printf("%d ", p->elem);
p = p->next;
}
printf("\n");
}
void insertlinklist(linklist &l, int x)
{
linklist p, q, s;
s = l;
p = s->next;
while(p && p->elem < x)
{
s = p;
p = p->next;
}
//将x插入到s和p之间
q = (linklist) malloc (sizeof(Node));
q->elem = x;
q->next = p;
s->next = q;
}
int main()
{
int n, x;
linklist l;
printf("请输入链表元素个数:\n");
scanf("%d", &n);
inlinklist(l, n);
printf("请输入要插入的元素的值:\n");
scanf("%d", &x);
insertlinklist(l, x);
outlinklist(l);
return 0;
}