2017-01-27 9 views
0

質問:私は何をするように求められましたか: Q)文は完全停止で終了した文字のリストで構成されています。リンクされた文字のリストを返す関数を書く。文字はユーザによって入力され、リストに追加される。返されるリストには、完全停止が含まれている必要があります。C++リンクリストを返す関数

LinkedList<char> *sentence; 
sentence = setUpSentence(); 

私はこの作品を書くことを試みてきたが、これは&機能このようなリンクリストでの作業は初めてであるように私は苦労しています: それは次のように呼ばれるべきです。

メインファイル

#include "LinkedList.h" 
    #include "ListNode.h" 
    #include "Node.h" 
    #include <iostream> 
    #include <stdlib.h> 
    using namespace std; 

    LinkedList<char> *setUpSentence() { 
     //allocate the linked list objet 
     LinkedList<char> *sentence = new LinkedList<char>(); 
     char ch; 
     do { 
      cout << "Enter characters to add, enter full stop to finish adding." << endl; 
      ch = cin.get(); 
      sentence->addAtEnd(ch); 
     } while (ch != '.'); 

     return sentence; 
    } 

    int main() { 

     //call the function, store the returned pointer in sentence variable 
     LinkedList<char> *sentence = setUpSentence(); 
     //working with the linked list 
     sentence = setUpSentence(); 



     cout << sentence->getAtFront() << endl; 

//delete to avoid memory leak 
     delete sentence; 
    } 

は、この関数を記述するために最初にこの試みを実行しようとしたとき、私は取得していますエラーは次のとおりです。コンソールに1つの文字を入力した後

と押すと、入力し、ループが続き、「文字を入力して....」を出力しますが、これは文字を入力するたびに2回表示されますか?

template <typename T> 
void LinkedList<T>::addAtEnd(T item) 
{ 
    if (size == 0) 
     addAtFront(item); 
    else 
    { 
     // ListNode<T>* temp = findAt(size - 1); 
     ListNode<T> *l = new ListNode<T>(item, last, nullptr); 
     last->next = l; 
     last = l; 
     size++; 
    } 
} 

template <typename T> 
T LinkedList<T>::getAtFront() 
{ 
    if (size > 0) 
    { 
     current = first; 
     return first->item; 
    } 
    else return NULL; 
} 

が編集:私のメインで使用されているLinkedList.hファイルから機能から

コード addAtFront方法LinkedList.hからは

template <typename T> 
void LinkedList<T>::addAtFront(T item) 
{ 
    ListNode<T> *l = new ListNode<T>(item, NULL, first); 
    first = l; 
    if (last == NULL) 
     last = l; 
    size = 1; 
} 
+0

再帰的な呼び出しは、特に結果が完全に使用されていないことを考慮すると明らかに疑問があるはずです。第2に、関連するコードをすべて提供しておらず、 'addAtFront'が正しく実装されていることを推測させる必要があります。 – WhozCraig

+0

@whozCraig私のコードはalex Petrenkoの提案とaddAtFrontメソッドで更新されました。 – Liam

+0

'sentence'を削除して、' cout'を 'sentence'の後で使用することはできません。 – drescherjm

答えて

2

ファイル私はなぜ知りませんreturn文でsetUpSentence()への再帰呼び出しをしようとしていますが、これは意味がありません。私はそれが代わりにこのように見えるはずだと思う:

LinkedList<char> * setUpSentence() { 
    // make sure to allocate the linked list object 
    LinkedList<char> *sentence = new LinkedList<char>(); 
    char ch; 
    do { 
     cout << "Enter characters to add, enter full stop to finish adding." << endl; 
     ch = cin.get(); 
     sentence->addAtEnd(ch); 
    } while (ch != '.'); 

    return sentence; 
} 

int main() { 
    // calling the function, store the returned pointer in sentence variable 
    LinkedList *sentence = setUpSentence(); 

    // ... working with the linked list ... 

    delete sentence; // don't forget to delete it to avoid memory leak! 
}