Floyd的算法 - SIGTSTP错误

时间:2018-06-05 15:27:06

标签: algorithm debugging error-handling floyd-cycle-finding

我正在研究一个问题,找出给定链表中循环中存在的节点数(如果有的话)。下面是接受节点头部的函数,使用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;
}

1 个答案:

答案 0 :(得分:0)

我不知道为什么你会看到SIGTSTP - 在资源有限的环境中可能会超时?

检查第一个循环中的循环条件。

另外,不要为slowfast分配new的空节点。那些是内存泄漏。