在有序链表中插入一个数,使其仍然有序(C语言)

#include
#include
typedef struct node{
	int data;
	struct node *next;
}linklist;

linklist *createList(){
	linklist *head,*p,*q;
    int x;
	scanf("%d",&x);
	p=(linklist *)malloc(sizeof(linklist));
	p->data=x;
	head=p;
	scanf("%d",&x);
	while (x!=-1){
		q=(linklist *)malloc(sizeof(linklist));
		q->data=x;
		p->next=q;
		p=q;
		scanf("%d",&x);
	}
	p->next=NULL;
	return head;
}

linklist *insertList(int n,linklist *head){
	linklist *p,*q,*s;
	s=(linklist *)malloc(sizeof(linklist));
	s->data=n;s->next=NULL;
    if (head==NULL) return p;
	p=q=head;
	while (q!=NULL && q->data < n){
		p=q;q=q->next;
	}
	if (p==head){
		s->next=p;head=s;//在头部插入
	}
	else{
	    s->next=q;p->next=s;
	}
	return head;
}
void printList(linklist *head){
	linklist *t;
	t=head;
	if (t==NULL)
		printf("这是一个空列表\n");
	while (t!=NULL){
		printf("%d ",t->data);
		t=t->next;
	}
	printf("\n");
}
int main()
{
    linklist *head;
	int n;
	printf("请输入一组递增数,以-1结束\n");
	head=createList();
	printList(head);
	printf("请输入要插入的数\n");
	scanf("%d",&n);
	head=insertList(n,head);
	printList(head);

	system("pause");
	return 0;
}

 

你可能感兴趣的:(数据结构算法)