私はチューターの助けを借りてリンクリストラボに取り組んでいますが、残念ながらしばらく前に彼らと連絡が取れなくなり、自分でこれを理解することができませんでした.
最初の while ループは、リンク リストを一度に 1 ノードずつ処理し、次に 2 番目の while ループに進みます。これはうまく機能しているようです。ただし、問題は、メンバーを削除すると、実際には先に進み、2 つ削除されることです。その前のものと、それが想定されているノードを削除します。
問題を list.cpp の 80 行目 (下記) に切り分けました。カーソル 2 のリンク フィールドを指す cursorOne の link_field が、2 つのカーソル間のすべてのノードを削除していると思いますが、これは私が望むものではありません。
では、カーソル 1 のリンク フィールドがカーソル 1 の次のリンク フィールドを指すようにする必要があると思います。私はとても近くに感じます..そして、このラボの難しい部分はすでに完了していますが、必要な最後のエウレカの瞬間はまだありませんが、私はそれをたくさん見てきました.
プログラムは次のとおりです。ノード クラスを使用し、それをリスト クラスで変更します。
よくよく考えてみると、ideone.com のコードにリンクできないと思います。そのため、これをできるだけ簡潔にして、ループを投稿するだけにします。ここにノードとlist.cppがあります
while(currentItem != NULL)
{
cout << "Enter Second Loop" << endl;
cout << currentItem->data_field << " Curse 2" << endl;
//compare it
if (nodeToFindDuplicatesOf->data_field == currentItem->data_field)
{
//prev->next = current->next to delete
// in order to delete only one, I must find a way to set the link_field of the previous node to cursor 1 to
// the link field of the node that's to be deleted
cout << nodeToFindDuplicatesOf->data_field << "being removed" << endl;
predecessor = currentItem->link_field;
delete currentItem;
currentItem = nodeToFindDuplicatesOf; //set cursor2 to cursor1
}
currentItem = currentItem->link_field;
}
nodeToFindDuplicatesOf = nodeToFindDuplicatesOf->link_field;
if (nodeToFindDuplicatesOf)
currentItem = nodeToFindDuplicatesOf->link_field;
}
}
ノード クラスに以前のノード ポインタが必要ですか?