私は、パラメータが前のノードへのポインタである挿入メソッドを作成しようとしています。しかし、私の移植には欠陥があります。C++単リンクリストの挿入?
test.insert(n2->_next, 4);
のように挿入すると機能しますが、これは以前のポインタではありませんか? test.insert(n2, 4);
のように呼び出された場合、ノードは挿入されませんか?
どこの人に教えてもらえますか?
メソッド(クラスLLToolkitの一部):
void insert(Node<t>* &prevPtr, t data)
{
if (prevPtr == nullptr) return;
prevPtr->_next = new Node<t>(data, prevPtr->_next);
}
void headInsert(Node<t>* &headPtr, t data)
{
headPtr = new Node<t>(data, headPtr);
}
ノード
template<typename t>
class Node
{
public:
Node()
{
_next = nullptr;
_data = data();
}
Node(t data = t(), Node<t>* next = nullptr) : _next(next), _data(data) {}
~Node(){ cout << "delete " << _data << _next << endl; }
Node<t> *_next;
t _data;
};
マイ試験:
int main()
{
LLToolkit<int> test;
Node<int>* n1 = new Node<int>(1, nullptr);
Node<int>* n2 = new Node<int>(2, n1);
Node<int>* n3 = new Node<int>(3, n2);
test.headInsert(n1, 1);
test.headInsert(n2, 2);
test.headInsert(n3, 3);
// Order is now 3 - 2 - 1
// Should insert new node after n2
// Like this 3 - 2 - 4 - 1
test.insert(n2, 4);
return true;
}
ここで新しいノードが挿入されるべきグレーマークで
以下のようなの行為。
あなたのコードに続いて
インプラントをインターフェイスから隠そうとする必要があります。新しいノードと 'headInsert'を作成せず、必要に応じて新しいノードを作成させます。データを' LLToolkit'にプッシュするだけです。 –
はい、これは学校の割り当てであり、プロトタイプがクラスに与えられました。だから私はそれを実装し、このようにテストしなければなりません。 @LogicStuff私の悪い私はノードの後にment。 – Mat0
@ Mat0 *しかし、これは学校の割り当てです* - 先生はメンバーの初期化リストを使用しませんでした。残りのコースではそれほどうまくいきません。また、リスト内に単一のノードを作成するために2つのノードを動的に割り当てるのはなぜですか?あなたの 'main'関数は' new'を使い、あなたが呼んでいる関数は 'new'をもう一度使っています。良いリンクリストはリンクされたリストのユーザーに "ノード"について何も知らせてはいけません。テストプログラムは、データを挿入するようにリンクリストに要求するだけで、内部的に作成する必要のあるノードをリンクリストクラス自体が作成できるようにする必要があります。 – PaulMcKenzie