我正在为下周的CS考试做准备,我正在尝试组合各种不同的程序来学习(这不是我要你们去做我的作业)。
无论如何,我现在制作的程序应该以各种方式(插入节点,追加节点,反向列表等)修改链表
我当前的问题是初始化列表。
以下是相关代码:
//linkedlist.h
#pragma once
struct Node
{
int datum;
Node* next;
};
class linkedlist
{
private:
Node* head;
Node* duplicateLinkedList(const Node* pOldHead)const;
public:
unsigned int memberCount()const;
void insertNode(int x);
void removeNode(int x);
void printNode()const;
void appendNode(int x);
void initList();
};
//linkedlist.cpp
#include <iostream>
#include "linkedlist.h"
using namespace std;
//Segmentation fault occurs in here
void linkedlist::initList()
{
head->datum = 0;
head->next = NULL;
}
我只是希望初始化列表,但我遇到了段错误。我知道我可以使用默认构造函数,但这是我们在课堂上一直使用的格式。如果需要,我可以提供更多代码,但是我相信这已经足够。
预先感谢您的帮助。
答案 0 :(得分:1)
您将取消引用未初始化的指针:head->next = NULL;
和head->datum = 0;
。
要初始化您的列表,您可以:
struct Node
{
int datum{};
Node* next{nullptr};
};
在
void linkedlist::initList(){
head = nullptr;
//head->datum = 0; don't do this becuase head is nullptr
//head->next = NULL; // don't do this head is nullptr.
}