注意:这个问题不是关于使用递归来反转链接列表,而是关于它崩溃的原因。它真的是关于动态内存的。
我正在实现一个链表,并希望在其中有一个递归反转它的函数。
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;
}
程序崩溃了。请帮我弄清楚原因。我认为它与函数的参数有关。
答案 0 :(得分:2)
这是一个问题。
if (node == 0) {
head = node;
return;
}
您刚刚将列表设为空列表。这应该是(更喜欢使用nullptr
或NULL
代替0
作为指针):
if (node == nullptr || node->next == nullptr ) {
head = node;
return;
}