####記錄####
在鏈表中解決從小到大排序的問題!
解決這個問題的方法很多
直接排序
代碼:
#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節點。
這裏就有了一個思想就是截斷鏈表,然後和前面的節點來作比較,找到比這個節點小的,就插入到相應的位置。依次截斷後續節點,再和前面的節點來作比較,插入相應的位置