2016-07-19 16 views
0

Ich aktualisiere meine C++ durch Erstellen einer einfachen Liste verknüpfter Listen. Was ich habe Probleme ist, wenn ich versuche, die Liste zu drucken, gibt es einen Nulldruck am Anfang der Liste. Wie kann ich das loswerden? Außerdem habe ich Probleme mit meinem zweiten Konstrukteur. Wie würde ich über diese gehen? `Verknüpfte Liste 0 Wert am Anfang C++

Hier ist der Code 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); 
}; 

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

Antwort

1

Sie nie den Kopf Knoten initialisieren, so Sie schreiben um nicht zugewiesenen Speicher im folgenden Code zu reservieren.

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

Es sollte:

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

Sie wahrscheinlich auch die erste Konstruktor wollen

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

statt

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

für den zweiten Konstruktor Wie zu sein, nehme ich an Du willst etwas wie Dies?

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

Wenn nicht, könnten Sie besser erklären, was Sie wollen?

Ich würde auch beachten, dass es in der Regel gute Programmierpraxis würde einen Konstruktor für die Node Struktur zu schaffen, die next zu NULL initialisiert, und dann würden Sie nicht gesetzt haben, explizit jedes Mal, wenn Sie ein new Node erstellen in Ihrem Code.

+0

Vielen Dank für Ihre Antwort. Ich habe Ihren Vorschlag versucht, aber ich bekomme immer noch eine Null auf der Liste. –

+0

Überprüfen Sie es. Hast du die Änderungen bemerkt? https://ideone.com/8HDsTA läuft erfolgreich mit der Ausgabe '2 -> 3 -> 0 -> 4' –

+0

Ja, ich sehe die Änderungen und ich sehe es auf dieser Website ausgeführt. Irgendwie bekomme ich immer noch die Null. Der Konstrukteur funktioniert aber danke. Ich verstehe nicht, warum es nicht funktioniert. –