在递增有序的双链表中插入一个元素使之任然具有递增有序的性质。
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct H
{
ElemType data;
struct H *next;
struct H *before;
}DulLinkList;
DulLinkList *Initialize(int a[],int n);
void prt(DulLinkList *head);
void insert(DulLinkList *head,int x);
int main()
{
int a[100];
int n,i,x;
DulLinkList *head;
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
head=Initialize(a,n);
scanf("%d",&x);
insert(head,x);
prt(head);
return 0;
}
DulLinkList *Initialize(int a[],int n)
{
DulLinkList *p,*head,*r;
int i=0;
head=(DulLinkList *)malloc(sizeof(DulLinkList));
if(head==NULL)
{
printf("ERROR\n");
exit(1);
}
head->before=NULL;
head->next=NULL;
r=head;
for(i=0; i<n; i++)
{
p=(DulLinkList *)malloc(sizeof(DulLinkList));
p->data=a[i];
r->next=p;
p->before=r;
r=p;
}
r->next=NULL;
return head;
}
void prt(DulLinkList *head)
{
DulLinkList *p;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void insert(DulLinkList *head,int x)
{
DulLinkList *p,*q,*s;
p=head->next;
if(x<=p->data){
s=(DulLinkList *)malloc(sizeof(DulLinkList));
s->data=x;
head->next=s;
s->before=head;
s->next=p;
p->before=s;
}else{
while(p!=NULL&&x>p->data){
p=p->next;
}
if(p==NULL){
p=head->next;
while(p->next!=NULL){
p=p->next;}
s=(DulLinkList *)malloc(sizeof(DulLinkList));
s->data=x;
p->next=s;
s->before=p;
s->next=NULL;
}else{
q=p->before;
s=(DulLinkList *)malloc(sizeof(DulLinkList));
s->data=x;
q->next=s;
s->before=q;
s->next=p;
p->before=s;
}}
}