2011-12-07 9 views
0

私は、複数のファイルとクラスを使用して単一リンクリストのプログラムを作成しています。クラスを使用した単一リンクリストの印刷

私はNode.h、LinkedList.h、Node.cpp、LinkedList.cpp、およびmain.cppに

私は今、他の問題が、私がprintlist()関数だけでプリントを持っていた「リストを持っている必要があります"List(node 1、node2、etc ...)"の代わりに "List(node 1、node2、etc ...)"の代わりに "()"を使用してください。

私のsearchNode()は正しく動作しないため、ここで

は私が持っているコードです。(私はNode.hとLinkedList.hファイルを変更することはできません)

Node.h:

// 
// Node.h 
// Linked Lists 
// 

#ifndef Linked_Lists_Node_h 
#define Linked_Lists_Node_h 

class Node 
{ 
public: 
    Node(int data); 
    int data; 
    Node *next; 

}; 

#endif 

LinkedList.h:

// 
// LinkedList.h 
// Linked Lists 
// 

#ifndef Linked_Lists_LinkedList_h 
#define Linked_Lists_LinkedList_h 

#include "Node.h" 

class LinkedList 
{ 
private: 
    Node *head; 

public: 
    LinkedList(); 
    void addNode(int data); 
    void removeNode(int data); 
    bool searchNode(int data); 
    void printList(); 

}; 

#endif 

Node.cpp

// 
// Node.cpp 
// Linked Lists 
// 

#include <iostream> 
#include <cstdlib> 

#include "LinkedList.h" 
#include "Node.h" 

using namespace std; 

Node::Node(int data) {}; 

LinkedList.cpp

// 
// LinkedList.cpp 
// Linked Lists 
// 

#include <iostream> 
#include <cstdlib> 

#include "LinkedList.h" 
#include "Node.h" 

using namespace std; 

LinkedList::LinkedList() 
{ 
    head = NULL; 
} 

void LinkedList::addNode(int data) 
{ 
    Node *newNode; 
    newNode->data = data; 
    newNode->next = NULL; 

    Node *tmp = head; 

    if(tmp != NULL) 
    { 
     while(tmp->next != NULL) 
     { 
      tmp = tmp->next; 
     } 

     tmp->next = newNode; 
    } 
    cout << "Node added" << endl; 
    printList(); 
} 

void LinkedList::removeNode(int data) 
{ 
    Node *tmp = head; 

    if(tmp == NULL) 
    { 
     cout << "No node removed" << endl; 
     return; 
    } 

    if(tmp->next == NULL) 
    { 
     delete tmp; 
     head = NULL; 
    } 
    else 
    { 
     Node *previous; 

     do 
     { 
      if(tmp->data == data) 
      { 
       break; 
      } 
      previous = tmp; 
      tmp = tmp->next; 
     } 
     while(tmp != NULL); 

     previous->next = tmp->next; 

     delete tmp; 
    } 
    cout << "Node removed" << endl; 
    printList(); 
} 

bool LinkedList::searchNode(int data) 
{ 
    Node *tmp = head; 

    while(tmp != NULL) 
    { 
     if(tmp->data == data) 
     { 
      cout << "Node found" << endl; 
      printList(); 
      return true; 
     } 
     tmp = tmp->next; 
    } 
    cout << "Node not found" << endl; 
    printList(); 
    return false; 
} 

void LinkedList::printList() 
{ 
    Node *tmp = head; 

    if(tmp == NULL) 
    { 
     cout << "List()" << endl; 
     return; 
    } 

    if(tmp->next == NULL) 
    { 
     cout << "List(" << tmp->data << ")"; 
    } 
    else 
    { 
     do 
     { 
      cout << "List(" << tmp->data; 
      cout << ", "; 
      tmp = tmp->next; 
     } 
     while (tmp != NULL); 

     cout << ")" << endl; 
    } 
} 

main.cppに

// 
// main.cpp 
// Linked Lists 
// 

#include <iostream> 
#include <cstdlib> 

#include "LinkedList.h" 
#include "Node.h" 
#include "LinkedList.cpp" 

using namespace std; 

int main() 
{ 
    LinkedList list; 

    int data; 
    int choice; 

    while(1) 
    { 
     cout << " Select:" << endl; 
     cout << "1 to add a node" <<endl; 
     cout << "2 to remove a node" << endl; 
     cout << "3 to search for a node" << endl; 
     cout << "4 to exit" << endl; 
     cout << endl; 

     cin >> choice; 

     switch(choice) 
     { 
      case 1: //insertion 
       cout << "Enter node: "; 
       cin >> data; 
       list.addNode(data); //add a node 
       break; 
      case 2: //deletion 
       cout << "Enter node: "; 
       cin >> data; 
       list.removeNode(data); //remove a node 
       break; 
      case 3: //search 
       cout << "Enter node: "; 
       cin >> data; 
       list.searchNode(data); //search for a node 
       break; 
      case 4: 
       exit(0); //exit the program 
       break; 
      default: //default case 
       cout << "Please enter a valid choice (1 - 4)!" << endl; 
       break; 
     } 
    } 
    return 0; 
} 

あなたは私が、私はそれを大幅に感謝し、私の問題を見つけ出す手助けができれば。

答えて

1

ノードを追加していません。 headNULLある場合は、あなたのアドオンのノードは次のようになります。あなたはこの場合(第一の挿入)を治療する必要が

void LinkedList::addNode(int data) 
{ 
    Node *newNode; 
    newNode->data = data; 
    newNode->next = NULL; 

    Node *tmp = head; 

    if(tmp != NULL) 
    { 
     //this never gets executed 
    } 
    cout << "Node added" << endl; 
    printList(); 
} 

void LinkedList::addNode(int data) 
{ 
    Node *newNode; 
    newNode->data = data; 
    newNode->next = NULL; 

    Node *tmp = head; 

    if(tmp != NULL) 
    { 
     while(tmp->next != NULL) 
     { 
      tmp = tmp->next; 
     } 

     tmp->next = newNode; 
    } 
    else 
    { 
     head = newNode; 
    } 
    cout << "Node added" << endl; 
    printList(); 
} 

が存在しない場合、これは頭が作成されます。

デバッガを使用していますか?もしあなたがそうしたら、あなたにとってはずっと簡単になるでしょう。

+0

ありがとうございました!私のすべての問題は解決されました! – Blake

+0

@Blakeが喜んで:) –

関連する問題