逻辑正确但程序崩溃

时间:2015-03-11 20:26:37

标签: c++

注意:这个问题不是关于使用递归来反转链接列表,而是关于它崩溃的原因。它真的是关于动态内存的。

我正在实现一个链表,并希望在其中有一个递归反转它的函数。

struct sNode {
    int data;
    sNode* next;
    sNode(int x) {
        data = x;
        next = 0;
    }
    sNode(int x, sNode* n) {
        data = x;
        next = n;
    }
};

class SLL {
    public:
        SLL() : head(0) {}
        sNode* getHead() { return head;}
        void reverseRec(sNode*); // Reverse the list using recursion;
    private:
        sNode* head;
};

void SLL::reverseRec(sNode* node) {
    // Reverse the list using recursion

    if (node == 0) {
        head = node;
        return;
    }
    reverseRec(node->next);
    sNode* temp = node->next;
    temp->next = node;
    node->next = 0;
}

int main() {
    SLL l1;
    l1.addAtEnd(1);
    l1.addAtBeg(2);
    l1.addAtPos(3, 2);
    l1.reverseRec(l1.getHead());
    return 0;
}

程序崩溃了。请帮我弄清楚原因。我认为它与函数的参数有关。

1 个答案:

答案 0 :(得分:2)

这是一个问题。

if (node == 0) {
    head = node;
    return;
}

您刚刚将列表设为空列表。这应该是(更喜欢使用nullptrNULL代替0作为指针):

if (node == nullptr || node->next == nullptr ) {
    head = node;
    return;
}