【发布时间】:2018-11-15 03:49:07
【问题描述】:
我正在解决一个问题,以在给定的链表中查找循环中存在的节点数(如果有的话)。下面是接受节点头的函数,使用 Floyds 循环算法检查循环,如果找到,则给出循环中的节点数。 在运行程序时,它会给出运行时错误 SIGTSTP,据我了解,这是在程序在执行期间要停止时传递的信号,考虑到,我无法看到此代码中要更改的内容。在调试时,突出显示的部分似乎是问题的根本原因。
请阐明 SIGTSTP 的含义以及如何在 C++ 中处理它。
int countNodesinLoop(struct Node *head)
{
Node* slow = new Node;
Node* fast = new Node;
slow = head;
fast = head;
**do{
if(slow==NULL || fast==NULL || fast->next==NULL)
return 0; // LOOP NOT FOUND
slow = slow->next;
fast = fast->next;
fast = fast->next;
}while(slow!=head);**
// LOOP FOUND
slow = head;
while(slow!=fast)
{
slow = slow->next;
fast = fast->next;
}
// BOTH SLOW AND FAST POINT TO THE NODE WHERE LOOPS START
int ans = 1; // COUNTER
slow = slow->next;
while(slow!=fast)
{
slow = slow->next;
ans++;
}
return ans;
}
【问题讨论】:
-
你能在调试器或valgrind中试试看是哪一行导致了信号吗?
-
我尝试调试它,除了表明问题出在“do-while”循环之外,无法得出任何结论。
标签: algorithm debugging error-handling floyd-cycle-finding