まず、私の悪い英語を申し訳ありません。二重リンクリストメソッドの正しい実装
二重リンクリストを実装しようとしましたが、いくつかのメソッドが正しく機能するかどうかはわかりません。実際、DATA
、unique()
、およびreverse()
に等しいすべての要素を削除するclear()
、remove(const short DATA)
- が正しく機能しません。 良いと思われる本、ビデオ、記事は見つかりませんでした。彼らはうまく動作するはずですように私はあなたの方法を修正してきた私は、私の方法でそれらを実装することができますが、(存在する場合)私は正式な方法に固執し、より多くの経験を積んだ人のソリューションは、鉱山
void DLList::clear()
{
Node *pCurr = mHead;
while (pCurr != nullptr)
{
mHead = pCurr->mNext;
delete pCurr;
pCurr = mHead;
}
}
void DLList::remove(const short DATA)
{
Node *pCurr = mHead;
while (pCurr != nullptr)
{
if (pCurr->mData == DATA)
{
if (pCurr == mHead)
{
mHead = pCurr->mNext;
delete pCurr;
pCurr = mHead;
}
else
{
Node *pPrev = pCurr->mPrev;
pPrev->mNext = pCurr->mNext;
delete pCurr;
pCurr = pPrev->mNext;
}
}
else
pCurr = pCurr->mNext;
}
}
void DLList::unique()
{
Node *pCurr = mHead;
while (pCurr != nullptr)
{
Node *pNextDistinct = pCurr->mNext;
while (pNextDistinct != nullptr && pNextDistinct->mData == pCurr->mData)
{
pNextDistinct = pNextDistinct->mNext;
delete pCurr->mNext;
pCurr->mNext = pNextDistinct;
pNextDistinct->mPrev = pCurr;
}
pCurr = pNextDistinct;
}
}
void DLList::reverse()
{
Node *pPrev = nullptr;
Node *pCurr = mHead;
while (pCurr != nullptr)
{
pCurr->mPrev = pCurr->mNext;
pCurr->mNext = pPrev;
pPrev = pCurr;
pCurr = pCurr->mPrev;
}
mHead = pPrev;
}
最初に紙にリンクリストを描きましたか?それぞれの操作は何ですか?リンクは線であり、ノードはボックスである。 1行のコードを書く前にまずやるべきことです。次に、紙の上に描いたコードに翻訳します。何か問題が生じた場合は、コードをデバッグして、紙に書いたものとどこが違うかを確認してください。 – PaulMcKenzie
あなたが投稿している場合は、「正しく動作しません」_、あなたはまた、理由を投稿する必要があります。何が起きたはずですか?代わりに何が起こったのですか? –
@PaulMcKenzie私は何も描いていませんでしたが、今からです。アドバイスありがとう – 0xbaadf00d