【发布时间】:2020-09-30 14:45:15
【问题描述】:
我目前正在学习数据结构,我试图创建一个函数 insert 以在第 n 个位置插入一个节点,但我总是遇到分段错误,请您帮忙。
#include <iostream>
using namespace std;
struct node {
int data;
node* next;
};
struct node* head = NULL;
void insert(int dat, int pos) {
node* temp = new node;
temp->data = dat;
temp->next = NULL;
if (pos == 1) {
temp->next = head;
head = temp;
return;
}
node* newtemp = head;
for (int i = 0; i <= pos - 1; i++) {
newtemp = newtemp->next;
}
temp->next = newtemp->next;
newtemp->next = temp;
}
void print() {
node* temp = head;
while (temp != NULL) {
cout << temp->data;
temp = temp->next;
}
cout << endl;
}
int main() {
head = NULL;
insert(4, 1);
insert(6, 2);
print();
}
【问题讨论】:
-
使用调试器逐步完成。如果您不知道如何在两行之间添加 std::cout 语句并通过最后一个打印语句的位置来解决问题,那么您就会知道问题出在哪里。尽可能添加空检查。我的猜测是任何时候人们实现一个位置或索引并使用它来遍历最有可能是问题的链接列表。您应该在 insert() 中使用 temp->next != nullptr 进行遍历
-
阅读 good C++ programming 书籍和 C++ 编译器的文档。对于GCC,请参阅this,并阅读调试器的文档(例如GDB)。请参阅this reference 并阅读How to debug small programs
标签: c++ algorithm c++11 data-structures