欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-13 12:26:47
...
#include<stdio.h>
#include<stdlib.h>
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;
}