2016-04-18 13 views
-2

Ich habe diesen Verknüpfungslisten-Code geschrieben und kann keine einzelne verknüpfte Liste erstellen, da der Wert, auf den Speicherbereich von nodeValue in der Hauptfunktion zeigt, sich ändert, was wiederum den Kopf- und Endwert ändert. Ich löste dies, indem ich ein Node-Objekt-Array (wie nodeValue [5]) erstellte und den Wert übergab, aber dies auf 5 Werte begrenzt.Es gibt eine Möglichkeit, dies effizient zu programmieren, ohne ein Array von Objekten zu verwenden?Bessere Weise, verkettete Liste zu kodieren?

#include<iostream> 
#include<string> 

using namespace std; 

class Node 
{ 
public: 
    int value; 
    Node *nextNodePointer; 
}; 

class linkedList 
{ 
private: 
    int count = 0; 
public: 
    Node *Head; 
    Node *Tail; 
    void AddNodeAfter(Node *); 
    //void removeNodeAfter(Node *); 
    void displayValues(); 
}; 

void linkedList::AddNodeAfter(Node *temp) 
{ 
    if (this->count == 0) 
    { 
     Head = temp; 
     Tail = temp; 
     count++; 
    } 

    else 
    { 
     Tail->nextNodePointer = temp; 
     Tail = temp; 
     count++; 
    } 
} 



Node createNodeObjects() 
{ 
    cout<< endl << "Enter integer value :"; 
    Node temp; 
    cin >> temp.value; 
    temp.nextNodePointer = NULL; 
    return temp; 
} 

void linkedList::displayValues() 
{ 
    if (count == 0) 
    { 
     cout << endl << "Nothing to display"; 
    } 

    else 
    { 
     Node value; 
     value = *Head; 
     for (int i = 1; i <= count; i++) 
     { 
      cout << endl << "Value: " << value.value; 
      value = *value.nextNodePointer; 
     } 
    } 
} 

int main() 
{ 
    cout << "Creating basic linked list" << endl; 
    linkedList LinkedList; 
    Node nodeValue; 
    while (1) 
    { 
     cout << endl << "Do you want to add a value to Node ?<Y/N> : "; 
     char choice; 
    cin >> choice; 
    if (choice == 'Y') 
    { 
     nodeValue = createNodeObjects(); 
     LinkedList.AddNodeAfter(&nodeValue); 
    } 
    else 
     if (choice == 'N') 
     { 
      LinkedList.displayValues(); 
      break; 
     } 
     else 
      cout << "Wrong choice" << endl; 

} 
} 
+2

Haben Sie noch die 'new' Stichwort studierte –

+1

Sie müssen sich über die dynamische Speicherzuordnung lernen hier starten:. [The Definitive C++ Buchführer und Liste ] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – Drop

+0

* Gibt es einen Weg zur effizienten Möglichkeit, dies zu codieren, ohne ein Array von Objekten zu verwenden * - ' Std :: Forward-Liste '. Außerdem, warum sollte "main" etwas über Nodes wissen? Das ist die Aufgabe der verknüpften Liste, um herauszufinden, was, wo, wann und wie Knoten zu verwenden sind. Alles, was das 'main'-Programm machen sollte, ist" Add this integer to your list ". – PaulMcKenzie

Antwort