マルチレベルの二重リンク リストを作成しています。ノードの追加操作を実行しています。以下で説明するロジック コードによれば、値を出力する必要があるのに、出力されないため、混乱しています。出力は間違っていませんが、そのリストを平坦化するときに影響を与える可能性のある何か間違ったことをしている可能性があります。
このリストには 3 つのレベルがあります。addNode 関数は最初のレベルで追加しますが、addChild 関数は 2 番目または 3 番目のレベルの任意の場所にノードを追加します。
コードは次のとおりです。
Student* StudentList::addNode(int num)
{
Student* node = new Student(num);
if(head == 0) {
head = node;
tail = node;
} else {
node->prev = tail;
tail->next = node;
tail = tail->next;
}
return node;
}
子を追加:
Student* StudentList::addChild(Student* node1, int num)
{
Student* node = head;
Student* temp;
Student* temp1;
// traversing the list to find exact location
while(node != 0)
{
if(node->num == node1->num) {
break;
} else {
temp = node->child;
while(temp)
{
if(temp->num == node1->num) {
node = temp;
break;
} else {
temp1 = temp->child;
while(temp1)
{
if(temp1->num == node1->num) {
node = temp1;
break;
} else {
temp1 = temp1->next;
}
}
temp = temp->next;
}
}
node = node->next;
}
}
Student* newChild = new Student(num);
Student* curr = node->child;
if(curr == 0)
{
node->child = newChild;
} else {
while(curr->next)
{
curr = curr->next;
}
newChild->prev = curr;
curr->next = newChild;
}
return node1;
}
主なメソッド コードは次のとおりです。
StudentList* sl = new StudentList();
Student* newNode;
Student* newNode1;
newNode = sl->addNode(1);
newNode1 = sl->addChild(newNode,11);
sl->addChild(newNode1, 111);
sl->addChild(newNode1, 112);
newNode1 = sl->addChild(newNode,12);
newNode = sl->addNode(2);
newNode1 = sl->addChild(newNode,21);
newNode1 = sl->addChild(newNode,22);
sl->addChild(newNode1, 221);
sl->addChild(newNode1, 222);
sl->addChild(newNode1, 223);
newNode = sl->addNode(3);
newNode = sl->addNode(4);
newNode1 = sl->addChild(newNode,41);
sl->addChild(newNode1, 411);
sl->printList();
私の印刷リストコードは次のとおりです。
void StudentList::printList(){
Student* curr = head;
while(curr){
cout<< *curr <<endl;
if(curr->child){
Student* newCurr = curr->child;
while(newCurr){
cout<< "*{"<<newCurr->num <<"}"<<endl;
if(newCurr->child){
Student* newCurr2 = newCurr->child;
while(newCurr2){
//according to my login this 3rd level childs num(id) value
//should be printed used only for 2nd level according to my
//logic.. where is the problem am i doing wrong any thing?
cout<< "**{"<<newCurr2->num <<"}"<<endl;
newCurr2 = newCurr2->next;
}
}
newCurr = newCurr->next;
}
}
curr = curr->next;
}
}
どうぞよろしくお願いいたします。