单链表---直接插入排序

####记录####

在链表中解决从小到大排序的问题!

解决这个问题的方法很多

直接排序

代码:

#include<stdio.h>

#include<stdlib.h>

typedef struct lNode

{

int data;

struct lNode *next;

}linklist;


linklist *create( linklist *L, int a[], int length )

{

linklist *r, *s;

int i;

L = ( linklist * )malloc( sizeof( linklist ) );

r = L;

for( i=0; i<length; i++ )

{

s = ( linklist * )malloc( sizeof( linklist ) );

s->data = a[i];

r->next = s;

r = s;

}

r->next = NULL;

return L;

}

/*here we sort the linklist from min to max*/

linklist *sort( linklist *L )

{

linklist *p, *q, *pre;

p = L->next->next;

L->next->next = NULL;/*cut the second node*/

while( p!=NULL )

{

pre = L;

q = p->next;

while( pre->next != NULL && pre->next->data < p->data )

pre = pre->next;

p->next = pre->next;

pre->next = p;

p = q;

}

return L;

}

void display( linklist *L )

{

linklist *p = L->next;

while( p->next != NULL )

{

printf("%d ",p->data);

p = p->next;

}

printf("%d\n",p->data);

}

int main()

{

int a[6] = {3,1,2,5,23,9};

int length = 6;

linklist *p,*L;

p = create( L, a, length );

display( p );

sort( p );

display( p );

return 0;

}

————————分割线—————————————

在第二个节点处截断,把第一个节点和第二个节点比较,小的排在大的前面。

pre指针再次回到L节点。

这里就有了一个思想就是截断链表,然后和前面的节点来作比较,找到比这个节点小的,就插入到相应的位置。依次截断后续节点,再和前面的节点来作比较,插入相应的位置

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值