LinkedList の末尾にノードを追加する関数を作成しようとしています。ループを使用してそれを行う方法は知っていますが、教授は特定の方法でそれを行うことを望んでおり、それが機能しない理由がわかりません。彼は実際にそのためのすべてのコードを私たちに与えました..
これは彼が私たちに与えた疑似コードです:
process append(data)
if (not the end)
next->append(data);
else
next=new Node();
next->data=data;
next->data = nullptr;
そして、これが私が思いついたものです:
struct Node {
int data;
Node* next;
};
struct LinkedList {
Node* head;
LinkedList() {head = nullptr;}
void prepend(int data) {
if (head == nullptr) {
Node* tmp = new Node();
tmp->data=data;
tmp->next=nullptr;
}
else {
Node* tmp = new Node();
tmp->data=data;
tmp->next=head;
head=tmp;
}
}
void append(int data) {
Node* tmp = head;
if (tmp->next != nullptr) {
tmp=tmp->next->append(data);
}
else {
tmp->next = new Node();
tmp->next->data = data;
tmp->next->next = nullptr;
}
}
};
int main()
{
LinkedList LL = LinkedList();
LL.prepend(7);
LL.append(6);
std::cout << LL.head->data << std::endl;
}
私のプリペンド (LinkedList の先頭に追加する) は正常に動作しますが、このコードを試すと、
main.cpp:48:20: エラー: 'struct Node' には 'append' という名前のメンバーがありません tmp->next->append(data);
したがって、next->append(data) と言うのには何か問題があると確信しています。これは、私が理解したことから、nullpointer に到達するまで append 関数を再帰的にコールバックすることになっています。何らかの書き方があるのではないかと思っているのですが、クラスの人から next->append(data) がうまくいくべきだと言われていて、なぜこれがうまくいかないのかよくわからないと思います。なんでも。代わりに Node 構造体に追加関数を記述しようとしましたが、 head がスコープで宣言されていないと表示され、これをどのように扱うか本当にわかりません。私はC ++のクラス/構造体も初めてなので、それについて私が理解していないことだと思います。