当我尝试通过我的函数打印我的列表时出现分段错误
segmentation fault when I'm trying to print my list through my function
我知道这对c++程序员来说可能是微不足道的,但我是一个试图弄清楚这一点的新手。在我的主程序中,如果我手动打印短列表(count <<)head->value等)它的工作原理,但当我使用我的打印功能,我得到一个分割错误。我一直在尝试使用调试器,但我不太擅长unix/c++,并且我在试图找出这个问题时感到沮丧。
#include <iostream>
using namespace std;
class ListNode
{
public:
int value;
ListNode* next;
};
void insertAtHead(ListNode** head, int value)
{
ListNode *newNode = new ListNode;
newNode->value = value;
if(head == NULL)
{
*head = newNode;
newNode->next = NULL;
}
else
{
newNode->next = *head;
*head = newNode;
}
}
void printList(ListNode* head)
{
while(head != NULL)
{
cout << head->value << "->";
head = head->next;
}
}
//inserts after the node with given value
void insertAfterNode(ListNode** head,ListNode** newNode, int value)
{
ListNode* current = *head;
while(current != NULL && (current->value != value))
{
//cout << "Im Here";
current = current->next;
cout << current->value;
}
(*newNode)->next = current->next;
current->next = *newNode;
}
int main()
{
ListNode *head;
insertAtHead(&head, 5);
insertAtHead(&head, 10);
ListNode* newNode = new ListNode;
newNode->value = 8;
newNode->next = NULL;
insertAfterNode(&head,&newNode, 5);
printList(head);
}
在函数中检查这些修改
void insertAtHead(ListNode** head, int value)
{
ListNode *newNode = new ListNode;
newNode->value = value;
newNode->next = *head;
*head = newNode;
}
void printList(const ListNode* head)
{
while(head != NULL)
{
cout << head->value << "->";
head = head->next;
}
}
在insertAtHead
中,你传递了一个双指针,所以比较应该是这样的。
增加访问前检查*head
是否为空。如果null
添加新节点为head
void insertAfterNode(ListNode** head,ListNode** newNode, int value)
{
ListNode* current = *head;
if (current != NULL)
{
while(current != NULL && (current->value != value))
{
//cout << "Im Here";
current = current->next;
cout << current->value;
}
(*newNode)->next = current->next;
current->next = *newNode;
}
else
{
*head = *newNode;
}
}
并且在main中使用
前先初始化head
int main()
{
ListNode *head = NULL;
insertAtHead(&head, 5);
printList(head); // <== note: by-value, not by address or reference.
您需要检查您试图访问的下一个值是否为空,如下所示:
void printList(ListNode* head)
{
if (head != NULL)
{
while(head->next != NULL)
{
cout << head->value << "->";
head = head->next;
}
}
}
第一个答案是正确的
但是我想再更正一下
在函数while
循环中插入节点后
current!=NULL
是不正确的,因为当且仅当列表中的最后一个节点匹配5
条件应为while(current->value!=value)
,您将到达值为5
相关文章:
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- gdb 中的列表命令不输出我编写的代码
- 只有我的"链接列表"中的第一个节点正在打印
- 如何确保我的节点被添加到链接列表中
- 无法在我的链接列表中插入项目,head始终为NULL
- 如何修复我的函数 popFront 为我的列表?
- 如何重载运算符<<显示我的列表
- 为什么我不能将元素插入数组中的列表?
- 似乎无法将我的标题文件与我的CPP文件连接到链接列表中
- 从二进制文件加载列表后,我的代码似乎进入了无限循环
- 我的列表类别的C SEG故障,但似乎都在检查
- 如何访问列表中的数据成员,具有与我的列表不同的类型
- 为什么我的列表中的迭代失败
- 为什么我的列表值被覆盖
- 为什么我的列表插入函数不生成新节点
- 我需要一个while循环来控制我的列表
- 当我尝试通过我的函数打印我的列表时出现分段错误
- 为什么我的列表在最后一次函数调用后被更改
- 我的合并排序函数是吐出 0 而不是对我的列表进行排序
- 我改变了我的列表(和代码),所以它现在处理Node*而不是Node Objects,这导致了一个未定义的引用错误