链接列表在c ++开始时打印0值

时间:2016-07-19 20:54:42

标签: c++ printing linked-list

我通过创建一个简单的链表类来刷新我的c ++。我遇到的问题是当我尝试打印列表时,列表的开头没有打印。我怎么能摆脱这个?另外,我的第二个构造函数遇到了问题。我怎么会这样做?“

这是代码 List.h

#ifndef NODE_H
#define NODE_H


class List{
    private:
        typedef struct Node{
            int data;
            struct Node* next;
        }* node;

        node head;
        int listLength;

    public:
        List();
        List(int data, node nextLink);
        void printList();
        void push(int data);
        void Delete(int d);
        int listSize(void);
};

我的List.cpp

#endif

#include "node.h"
#include <iostream>
using namespace std;

List::List(){
    head->data=0;
    head->next= NULL;
    listLength=0;
}

List::List(int data, node nextLink){
    head=NULL;
    listLength++;
}

void List::push(int data){



    if(head==NULL){
        head->data=data; 
        head->next= NULL;
    }
    else{
        node cursor = head;
        while(cursor->next != NULL)
            cursor = cursor -> next;

        node newNode= new Node;
        newNode->data=data;
        newNode->next=NULL;
        cursor->next= newNode;
    }
    listLength++;
}

void List::printList(){
    node cursor=head;
    while(cursor!=NULL){
        //if(cursor->data==0){cursor=cursor->next;}
        if(cursor->next==NULL){
            cout<<cursor->data<<endl;
            return;
        }
        else{
            cout<<cursor->data<<" -> ";
            cursor=cursor->next;
        }

    }
    cout<<endl;
}
int main(){ 
    List li;
    li.push(2);
    li.push(3);
    li.push(0);
    li.push(4);
    li.printList();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您永远不会初始化您的头节点,因此您将在下面的代码中写入未分配的内存。

if(head==NULL){
    head->data=data; 
    head->next= NULL;
}

应该是:

if(head==NULL){
    head = new Node; // added this line
    head->data=data; 
    head->next= NULL;
}

您可能也想要第一个构造函数

List::List(){
    head->data=0;
    head->next= NULL;
    listLength=0;
}

改为

List::List(){
    head = NULL;
    listLength=0;
}

至于第二个构造函数,我假设你想要这样的东西?

List::List(int data, node nextLink){
    head = new Node;
    head->data = data;
    head->next = nextLink;
    listLength = 1;
}

如果没有,你能更好地解释一下你想要的吗?

我还要注意,为Node结构创建一个初始化nextNULL的构造函数通常被认为是一种很好的编程习惯,然后你就不必每次在整个代码中创建new Node时都会明确设置它。