####记录####
在链表中解决从小到大排序的问题!
解决这个问题的方法很多
直接排序
代码:
#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节点。
这里就有了一个思想就是截断链表,然后和前面的节点来作比较,找到比这个节点小的,就插入到相应的位置。依次截断后续节点,再和前面的节点来作比较,插入相应的位置