打印链接列表返回随机符号

时间:2018-01-27 19:59:13

标签: c++ linked-list adt singly-linked-list

我已经实施了一个基本的链接列表,以便为更难的任务做准备。我似乎无法在不打印随机符号的情况下打印节点的内容 我知道这意味着我正在访问不良记忆,但我无法确定它发生在何处或如何发生 有人可以帮我解决这个错误吗?

在linux上使用g ++构建

标头文件

#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 个答案:

答案 0 :(得分:0)

@ C.M。如果这解决了问题,请告诉我

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;
    }
}

还改变了linkedlist doublel = linkedlist(lib,3);到

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

在main()文件中