LinkedListクラスのduplicate()メソッドを使用してリンクリストのコピーを作成しようとしています。私はこのメソッドを動作させる方法について一日中頭を悩ましてきました。C++ Linked Listのコピーをクラスオブジェクトとして作成するにはどうすればよいですか?
重複するメソッドは、リストの正確なコピーを作成し、新しいリストへのポインタを返す必要があります。新しいリストのLinkedListメソッドを呼び出せるようにしたい。私はLinkedListポインタを返す必要がありますか?またはノードポインタ?私はここで簡単に何かが完全に欠けているように感じる。
新しいヘッドノードの位置をLinkedListポインタにどのように格納することもできますか?
//LinkedList.h
#pragma once
#include<string>
using namespace std;
struct Node {
string nodeData;
Node* nextNode;
};
class LinkedList {
public:
LinkedList();
~LinkedList();
bool insert(string givenData);
bool remove(string givenData);
void print() const;
int count() const;
int find(string givenData) const;
bool removeAll();
LinkedList* duplicate() const;
private:
Node* head;
};
//LinkedList.cpp duplicate() method
LinkedList* LinkedList::duplicate() const {
LinkedList* newList;
Node* newHeadNode = new Node;
Node* newNode = new Node;
newHeadNode->nodeData = head->nodeData;
newHeadNode->nextNode = head->nextNode;
Node* currentNode = head->nextNode;
Node* previousNode = head;
while ((currentNode) && (newNode->nodeData > currentNode->nodeData)) {
previousNode = currentNode;
currentNode = currentNode->nextNode;
newNode->nextNode = previousNode->nextNode;
previousNode->nextNode = newNode;
}
}
私は再帰をまだ学習していないので、頭が少し上にあるのではないかと心配しています。私はちょうど浅いコピーが必要だと思っています。私はその概念にあまり慣れていない。 *これを渡されたリストと同じに設定すると、あなたはどういう意味ですか? –
再帰を使用できるものは、ループでも使用できます。コンセプトに慣れていない場合は、代わりに 'while'ループを使用してください。 –