質問:私は何をするように求められましたか: 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;
}
再帰的な呼び出しは、特に結果が完全に使用されていないことを考慮すると明らかに疑問があるはずです。第2に、関連するコードをすべて提供しておらず、 'addAtFront'が正しく実装されていることを推測させる必要があります。 – WhozCraig
@whozCraig私のコードはalex Petrenkoの提案とaddAtFrontメソッドで更新されました。 – Liam
'sentence'を削除して、' cout'を 'sentence'の後で使用することはできません。 – drescherjm