Печать связанного списка возвращает случайные символы

Я реализовал базовый связанный список, чтобы подготовиться к более сложному списку заданий. Я не могу печатать содержимое узла без распечатки случайных символов.
Я знаю, что это означает, что у меня плохая память, но я не могу определить, где и как это происходит.
Может кто-нибудь, пожалуйста, помогите мне исправить эту ошибку?

построено с g ++ на Linux

Заголовочный файл

#ifndef LLIST_H
#define LLIST_H

#include <string>
using namespace std;

struct node
{
int age;
string name;
string hair;
int height;
node* next;
};

node loadNode(node a, string b);class linkedlist
{
private:
node* head = NULL;
node* tail = NULL;
int size;
public:
linkedlist();
linkedlist(node* n[], int si);
int getSize();
void print();
void addNode(node add);
void del(string record);
node sort(node sortee);
void printList();
node * getHead();
};
#endif

Реализация

#include "list.h"#include <iostream>
#include <sstream>
#include <string>node loadNode(node a, string b)
{
int counter = 0;

string ag = "";
string nam = "";
string hai = "";
string hei = "";for(int i = 0; i < b.length(); i++)
{
if(b[i] == ',')
{
counter++;
i++;
}
if(counter == 0)
ag = ag + b[i];
else if(counter == 1)
nam = nam + b[i];
else if(counter == 2)
hai = hai + b[i];
else
hei = hei + b[i];
}

stringstream s(hei);
stringstream o(ag);

int f,g;
s >> f;
o >> g;

a.hair = hai;
a.height = f;
a.age = g;
a.name = nam;

return a;

}

linkedlist::linkedlist()
{
head = NULL;
tail = NULL;
size = 0;
}

linkedlist::linkedlist(node a[],int si)
{
head = NULL;
tail = NULL;
size = 0;

for(int i = 0; i < si; i++)
{
addNode(a[i]);
}

}

void linkedlist::addNode(node added)
{
node * pointer = new node;
//if the first element
if(size == 0)
{
tail = pointer;
pointer->next = NULL;
}
pointer->next = head;
head = pointer;

//add data members
pointer-> age = added.age;
pointer-> hair = added.hair;
pointer-> name = added.name;
pointer-> height = added.height;

size++;

//time to exit!
pointer = NULL;
delete pointer;
}

node *  linkedlist::getHead()
{
node * temp = head;
return temp;
}

void linkedlist::print()
{node* iterator = (node*)malloc(sizeof(node));
iterator = head;

while(iterator != NULL)
{
printNode(iterator);
iterator = (iterator->next);
}
iterator = NULL;
delete iterator;
}

void printNode(node* printed)
{
cout << printed->name << endl;
cout << printed->age << endl;
cout << printed->height << endl;
cout << printed->hair<< endl;
}

основная программа

#include "list.h"#include <fstream>
#include <iostream>

using namespace std;

int main()
{
string k = "21,Ces Goose,brown,5";
string a = "25, SteveO, Brown, 6";
string b = "23, Jimmy , Brown, 5";node d,f,c;
d = loadNode(d,k);
f = loadNode(f,a);
c = loadNode(c,b);

node lib[3] = {d,f,c};
linkedlist doublel = linkedlist(lib, 3);

doublel.print();return 0;}

Вывод, который я получаю:

6304000
@g���

-1

Решение

@СМ. пожалуйста, дайте мне знать, если это решит проблему

void linkedlist::addNode(node added)
{
node * temp = new node;
//add data members
temp-> age = added.age;
temp-> hair = added.hair;
temp-> name = added.name;
temp-> height = added.height;

//if the first element
if(size == 0)
{
head = temp;
tail = temp;
temp->next = NULL;
size++;
}
else
{
temp->next = head;
head = temp;
size++;

//time to exit!
temp = NULL;
delete pointer;
}
}

также изменен связанный список doublel = связанный список (lib, 3); в

linkedlist * doublel = new linkedlist(lib,3);
doublel->print();

в файле main ()

0

Другие решения

Других решений пока нет …