我正在尝试了解链接列表,并获得了很多建议。 现在,我正在使用的程序正在对链接列表中的名称进行排序。 基本上,用户将输入一个名称,该名称将在列表中的其他两个项目之间发送(如果列表不为空)。 我有一个名为“节点”的结构,其中包含指向下一个节点的指针和一条数据(字符串)。 这就是我的位置。如果头指针为nullptr,我的程序将成功添加一个名称。然后将newNode-> next设置为nullptr,以便可以将我定义为列表的末尾。
这是代码:
// create a new node
Node* newNode = new Node;
Node* trail = nullptr;
Node* current = head;
// initialize the value of the new node
newNode->data = name;
// Make new node point to the previous first node
//base case 1
if (head == nullptr) {
head = newNode;
newNode->next = nullptr;
return true;
}
问题出在代码的下一部分:
if (head != nullptr) {
current = head;
trail = current;
current = current->next;
while (name.at(1) > current->data.at(1)) {
trail = current;
current = current->next;
}
if (current->next = nullptr) {
trail->next = newNode;
newNode->next = nullptr;
}
if (current->next != nullptr) {
newNode->next = current;
trail->next = newNode;
}
}
引发异常。错误消息说“这是nullptr”。 我的问题是,这是什么意思?如何发生此错误,并且最好的解决方法是什么? 很抱歉,这个问题是重复性的,但其他类似问题与链接列表无关。 谢谢!
答案 0 :(得分:1)
在这段代码中,您是否检查current
是否不是nullptr
?
while (name.at(1) > current->data.at(1)) {
trail = current;
current = current->next;
}
下一步,请注意,您在这里有一个作业,而不是进行比较:
if (current->next = nullptr) {
trail->next = newNode;
newNode->next = nullptr;
}
此if
语句将始终为false,下一条语句(if (current->next != nullptr)
)也将始终为false。