链表插入排序 链表指针实现

#include<stdlib.h>
#include<stdio.h>

typedef struct node* link;  //链接
struct node
{
	int item;
	link next;  
};//节点
int main(void)
{
	struct node heada, headb;
    link t, u, x, a=&heada, b=&headb;
	b->next=NULL;
    int N=9;
   
    t=a;
    //头节点a指向t的首节点
    
    for(short i=0; i<N; i++)
    {
    	t->next = malloc(sizeof *t);
	    t=t->next; 
	    t->item= rand()%1000;
    }
    t->next=NULL;
    //初始化链表为0-999的随机数,结尾指向NULL
    
    
    for(t=a->next; t!=NULL; t=u)
    {
    	u=t->next; 
    	//将t的下一个节点地址保存在u
    	//循环结束时将t指向t的下一个节点
	    for( x=b; x->next!=NULL; x=x->next)
			if(x->next->item > t->item) break;
			//判断b的下一个节点值是否大于当前a的节点
			//如果成立立即跳出循环进行排序
		//
		t->next = x->next; 
		//将t的下一个节点指向 b的下一个节点
		//a的首节点指向NULL
		x->next=t; //将b的下一个节点指向当前t节点
	}
//	排列这些节点使遍历链表按照顺序出现
	b=b->next;
	a=a->next;
	//使a&b指向首节点而不是头节点
	for(short i=0; i<N; i++)
	{
		printf("%d ", b->item);
		b=b->next;
	}
	putchar('\n');
	for(short i=0; i<N; i++)
	{
		printf("%d ", a->item);
		a=a->next;
	}
	//分别打印a,b
	
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值