构造了一个链表,在对链表进行排序的时候出错了。
程序可以编译通过,运行时“意外终止”,不知道哪里错了,恳请大神指导!
意外终止截图:
下面是代码:
#include <stdio.h>
#include <stdlib.h>
//链表结构体
typedef struct Node{
int data;
struct Node * pNext;
}NODE,*PNODE;
PNODE createList();//创建链表
int lengthList(PNODE pHead);//获取链表长度
void sortList(PNODE);//冒泡排序
int main()
{
int length;
PNODE pHead=NULL;
pHead=createList();
sortList(pHead);
return 0;
}
//创建链表
PNODE createList(){
int i,n;
int val;
PNODE pHead=(PNODE)malloc(sizeof(NODE));
if(pHead==NULL){
printf("创建节点失败!\n");
exit(-1);
}
pHead->pNext=NULL;
PNODE pTail=pHead;
printf("请输入要创建的链表长度:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("第 %d 个节点的值:\n",i+1);
scanf("%d",&val);
PNODE pNew=(PNODE)malloc(sizeof(NODE));
if(pNew==NULL){
printf("failed to create\n");
exit(-1);
}
pNew->data=val;
pTail->pNext=pNew;
pNew->pNext=NULL;
pTail=pNew;
}
return pHead;
}
//获取链表长度
int lengthList(PNODE pHead){
int i=0;
PNODE p=pHead->pNext;
while(p!=NULL){
i++;
p=p->pNext;
}
return i;
}
//冒泡排序
void sortList(PNODE pHead){
int i,j,t,len;
PNODE p,q;
len=lengthList(pHead);
p=pHead->pNext;
for(i=0;i<len-1;i++){
for(j=0;j<len-i;j++){
q=p->pNext;
if( p->data > q->data){
t=p->data;
p->data=q->data;
q->data=t;
}
p=q;//可能是这里出错了
}
}
return ;
}
找到错误了。
链表只有len个长度,但是我循环了len*len个长度,所以报错,现已经解决,谢谢!