(含链表头添法、尾添法)写一个函数 int insertNode(LinkedList* pList, int number); 实现将一个结点插入到从小到大排列的链表中。-1表示内存耗尽,1表示成功

#include <stdio.h>
#include <stdlib.h>
typedef struct _node{
	int n;
	struct _node*next;
}node;

typedef struct _linkedlist{
	node*head;
}linkedlist;

void Addtotail(linkedlist*plist, int number);
void Addtohead(linkedlist*plist, int number);
void Print(linkedlist*plist);
void Free(linkedlist*plist);
int Insertnode(linkedlist*plist,int number);

void main(){
	linkedlist list;
	list.head=NULL;
	int n,N;
	do{
		scanf("%d",&n);
		if(n!=-1)
		Addtotail(&list,n);
	}while(n!=-1);
	Print(&list);
	do{
		scanf("%d",&N);
		if(N!=-1)
			if(Insertnode(&list,N)==-1)
		printf("内存耗尽"); 
	}while(N!=-1);
	Print(&list);
	Free(&list);
}

void Addtotail(linkedlist*plist, int number){
	node*p=(node*)malloc(sizeof(node));
	p->n=number;
	p->next=NULL;
	node*last=plist->head;
	if(plist->head!=NULL){
		while(last->next!=NULL)
		last=last->next;
		last->next=p;
	}else
		plist->head=p;
}

void Addtohead(linkedlist*plist, int number){
	node*p=(node*)malloc(sizeof(node));
	p->n=number;
	p->next=NULL;
	if(plist->head!=NULL){
		p->next=plist->head;
		node*q=p;
		p=plist->head;
		plist->head=q;
	}else
		plist->head=p;
}

void Print(linkedlist*plist){
	node*p=plist->head;
	while(p!=NULL){
		printf("%d ",p->n);
		p=p->next;
	}printf("\n");
}

void Free(linkedlist*plist){
	node*p=plist->head;
	node*q=NULL;
	while(p!=NULL){
		q=p->next;
		free(p);
		p=q;
	}
}

int Insertnode(linkedlist*plist,int number){
	node*p=(node*)malloc(sizeof(node));
	if(p==NULL)
	return -1;
	p->n=number;
	p->next=NULL;
	node*q=plist->head;
	if(p->n<=q->n){
		Addtohead(plist,number);
		return 1;
	}
	else{
		node*r=q->next;//有序,所以至少有两个node 
		while(p->n>r->n){
			q=r;
			r=r->next;
			if(r==NULL){
			Addtotail(plist,number);
			return 1;
			}
		}
		p->next=r;
		q->next=p;
		return 1;
	} 
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值