数据结构中的线性链表 冒泡排序,感觉快崩溃了~

sixer 发布于 2013年11月27日 | 更新于 2013年11月28日
无人欣赏。
void linkList_sort_bubble(linkList *l){//线性链表冒泡排序
linkNode *p=(linkNode *)malloc(sizeof(linkNode)),*q,*last=NULL;
p->next=*l;
*l=p;
while((*l)->next!=last)
{
    p=*l;
    q=p->next;
    while(q->next!=last)
    {
        if (p->next->data > q->next->data)
        {//交换
            printf("JKJK\n");
            p->next=q->next;
            q->next=q->next->next;
            p->next->next=q;//这句有问题,加上就不能正常运行,但看上去没问题啊??
        }

        p=p->next;
        q=q->next;
    }
    last=q;
}
*l=(*l)->next;}
共5条回复
sixer 回复于 2013年11月27日
 typedef struct linkNode{//这是我的结构体定义。
int data;
struct linkNode * next;}linkNode,* linkList;
sixer 回复于 2013年11月27日

主要问题就是注释那句,加上就运行不了提示

/bin/bash: line 1: 9135 Segmentation fault: 11 "linklistlink20131127180648" [Finished in 0.4s with exit code 139]

去掉可以正常运行,但运行结果肯定又不对了,太奇怪了!

decimalbell 回复于 2013年11月28日

。。。没看出while死循环了吗

sixer 回复于 2013年11月28日

3楼 @decimalbell 检查了一下,两个while都没有死循环啊。

saiyagg 回复于 2013年11月28日

@sixer

看了你的程序,我有以下部分不是很明白:

  • 程序中是用一个指向 linkNode 的指针来表示链表结束么,最后一个 node 的 next 设置为 NULL就可以了呀。
  • 外层循环用 l->last 来做条件判断,但 l 的修改是在此循环外部做的。对于这一点,@sixer 确定这个有没有问题。
登录 或者 注册