#include#include typedef struct lnode{ int data; lnode *next; }lnode,*linklist; void sort(linklist &l); void printlink(linklist &l); void creat(linklist &l,int a[],int n); int main(){ linklist l; l = (lnode*)malloc(sizeof(lnode)); l->next = NULL; //int a[10] = {1,2,3,4,5,6,7,8,9,10}; int a[9] = {1,2,3,4,5,6,7,8,9}; //creat(l,a,10); creat(l,a,9); sort(l); printlink(l); return 0; } void sort(linklist &l){ lnode *fast,*low; fast=l; low=l; while(fast != NULL && fast->next != NULL){ //找到中间的那个 fast = fast->next->next; low = low->next; } //low就是指向中间的结点 倒置low后面的结点 lnode *p,*q; p = low->next; low->next = NULL; while(p != NULL ){ q = p->next; p->next = low->next; low->next = p; p=q; } //printf("%dnn",low->data); //将后面的数组插入 前面的数组 p = l->next; //p是插入点 q = low->next; //要插入的第一个元素 low->next = NULL; lnode *m; while(q!=NULL){ m = q->next; q->next = p->next; p->next = q; q = m; p=p->next->next; } } void printlink(linklist &l){ lnode *s=l->next; while(s!=NULL){ printf("%dn",s->data); s=s->next; } } void creat(linklist &l,int a[],int n){ lnode *s,*p; s=l; for(int i=0;i p = (lnode*)malloc(sizeof(lnode)); p->data = a[i]; s->next = p; s=p; } s->next = NULL; }
注:这道题好难,写了好久,还是看答案写出来的QWQ。



