Я пытаюсь распечатать узлы связанного списка, но каждый раз, когда я пытаюсь распечатать свой связанный список, я получаю ошибки seg. Мы используем класс с указателем на структуру узлов. Я делал связанные списки в C раньше, но не в C ++. Тем не менее, я не вижу никаких логических ошибок.
Заголовочный файл:
class List
{
private:
struct ContactNode {
std::string firstName;
std::string lastName;
std::string phoneNumber;
struct ContactNode* next;
};
ContactNode* head;
public:
List();
~List();
void insert(std::string phoneNumber, std::string firstName, std::string lastName);
void deleteNode(std::string firstName, std::string lastName);
void print();
};
Функция вставки:
void List::insert(std::string phone_Number, std::string first_Name, std::string last_Name)
{
ContactNode* newNode;
ContactNode* nodePtr;
ContactNode* previousNode = nullptr;
newNode = new ContactNode;
newNode->firstName = first_Name;
newNode->lastName = last_Name;
newNode->phoneNumber = phone_Number;
if (!head) // head points to nullptr meaning list is empty
{
std::cout << "Inserted to head node!" << std::endl << std::endl;
head = newNode; // head now points to the new node
newNode->next = nullptr;
}
else // otherwise look for the right place to insert node
{
nodePtr = head;
previousNode = nullptr;
while (nodePtr != nullptr && newNode->lastName.compare(nodePtr->lastName) > 0)
{
previousNode = nodePtr;
nodePtr = nodePtr->next;
}
if (previousNode == nullptr) // if the new node is to be the first in the list
{
head = newNode;
newNode->next = nodePtr;
}
else // otherwise insert after the previous node
{
previousNode->next = newNode;
newNode->next = nodePtr;
}
}
}
Функция печати: я получаю ошибки сегмента в то время как я oop, когда я пытаюсь распечатать атрибуты узлов в списке.
void List::print()
{
ContactNode *temp = this->head;
if (!temp) {
std::cout << "No contacts in the phone book!" << std::endl << std::endl;
return;
}
//Prints header
std::cout << std::left << std::setw(30) << "Last Name" << std::setw(30) << "First Name" << std::setw(30) << "Phone Number" << std::endl;
std::cout << std::setw(30) << "==========" << std::setw(30) << "=========" << std::setw(30) << "============" << std::endl;
//Prints all contacts
while (temp) {
std::cout << std::setw(30) << temp->lastName << std::setw(30) << temp->firstName << std::setw(30) << temp->phoneNumber << std::endl;
temp = temp->next;
}
std::cout << std::endl << std::endl;
}