【发布时间】:2020-07-16 13:46:55
【问题描述】:
我正在尝试使用以下函数在 C 中的链表上执行插入排序,它陷入了无限循环。我调试了代码,发现它适用于第一遍,而在第二遍中卡在无限循环中。
void insertion_sort()//Insertion Sort function
{
struct Node *p = root->next;
struct Node *a = NULL, *b = NULL;
while(p != NULL)
{
a = root;
while(a != p)
{
b = a;
a = a->next;
}
if(b != NULL)
b->next = a->next;
a->next = NULL;
struct Node *q = root;
struct Node* r = NULL;
while(p->data > q->data)
{
r = q;
q = q->next;
}
p->next = q;
if(r != NULL)
r->next = p;
p = p->next;
}
}
【问题讨论】:
-
我马上看到的一个问题:
while(a != p)循环更改a但不检查它是否会变为 NULL。我有点惊讶你没有遇到段错误。与while(p->data > q->data)相同:它更改q,但从不检查q是否为NULL。解决这些问题。如果您仍然有一个无限循环,在您的调试过程中,检查while循环条件以确保它们朝着最终会产生错误测试的方向前进。 -
为什么函数返回void?为什么不接受任何争论?为什么 root 是全局变量?
标签: c sorting linked-list infinite-loop insertion-sort