-1
挿入時にソートするために二重リンクリストコードを修正しようとしました。ここに私が持っているものがあります。それはリストに挿入され、並べ替えられません。これでちょっと苦労しました。とても有難い。ソートされた二重リンクリストに挿入するC++
template <typename T>
bool DoublyLinkedList<T>::insert(T data)
{
int i = 0;
Node<T> *tmp, *newNode;
bool check = false;
newNode = new Node<T>(data);
tmp = mHead;
if (newNode == NULL)
return false;
if (mHead == NULL)
{
mHead = newNode;
mTail = newNode;
mCount++;
return true;
}
while (tmp != NULL)
{
if (tmp->mNext == NULL)
{
if (tmp->mData <= data)
{
newNode->mPrevious = tmp;
tmp->mNext = newNode;
mTail = newNode;
}
else
{
newNode->mNext = tmp;
tmp->mPrevious = newNode;
mHead = newNode;
}
}
else if (tmp->mNext->mData >= data)
{
newNode->mPrevious = tmp;
newNode->mNext = tmp->mNext;
tmp->mNext->mPrevious = newNode;
tmp->mNext = newNode;
break;
}
tmp = tmp->mNext;
}
mCount++;
return true;
}
理論は簡単です:挿入したいノードより大きな(またはソート順に応じて小さい)値を持つ最初のノードを探します。見つかったノードの前に新しいノードを追加します。実際には、少し難しいかもしれません。そのため、コードを書く前に紙に書いておきたいのです。現在のリストの先頭または末尾に新しい値を挿入する場合は、コーナーケースを覚えておいてください。 –
あなたの問題については、(上のアドバイスを使用して)関数をやり直したくない場合は、デバッガの使い方を学ぶ必要があります。また、コードを一行ずつ進める方法もあります。あなたのような問題を見つけるのに役立ちます。 –
デバッグを支援するには、どのような場合に正しく挿入されていないのですか?最初は?最後に?真ん中のどんな場合? – vu1p3n0x