开发者社区> 问答> 正文

对链表冒泡排序的错误

构造了一个链表,在对链表进行排序的时候出错了。
程序可以编译通过,运行时“意外终止”,不知道哪里错了,恳请大神指导!
意外终止截图:
screenshot
下面是代码:

#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 ;
}

展开
收起
a123456678 2016-06-12 10:50:26 1824 0
1 条回答
写回答
取消 提交回答
  • screenshot

    2019-07-17 19:33:26
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载