小弟做的一个把链表排序的算法,始终不知道哪里出错,求大侠啊
程序代码:
#include<stdio.h> #include<malloc.h> #define OK 1 #define ERROR 0 #define ElemType int typedef struct LNode { int key; struct LNode *next; }LNode,*LinkList; int CreateLink_L(LinkList L,int n) { LinkList p,q; int i; ElemType e; q=(LinkList)malloc(sizeof(LNode)); q=L; for(i=0;i<n;i++) { scanf("%d",&e); p=(LinkList)malloc(sizeof(LNode)); p->key=e; q->next=p; q=p; q->next=NULL; } return OK; } int LoadLink_L(LinkList L) { LinkList p = L->next; if(!L)printf("The List is empty!"); else { printf("The LinkList is:"); while(p!=NULL) { printf("%d ",p->key); p=p->next; } } printf("\n"); return OK; } int Paixu(LinkList L) { LinkList s,t,p,q; t=L; while(t!=NULL)\\经过我调试发现,程序始终在这里无限循环 { p=L; q=p->next; while(q&&((t->key)<(q->key))) { p=q; q=p->next; } s=t; t=t->next; p->next=s; s->next=q; } if(!t) return OK; else return ERROR; } int main() { int n; LinkList head; head=(LinkList)malloc(sizeof(LNode)); head->next=NULL; printf("请输入一个数字n,建立n个结点的链表\n"); scanf("%d",&n); CreateLink_L(head,n); LoadLink_L(head); Paixu(head); LoadLink_L(head); return 0; }
老师让我们做的,将此链表的记录按照key递增的顺序进行就地排序。这次是真不行了,我调试了很久,大脑疲劳了,来求助一下各位大侠,算法应该是没有问题的,不知道错在哪