class LN {
public:
LN() : next(nullptr){}
LN (const LN<T>& ln) : value(ln.value), next(ln.next){}
LN (T v, LN<T>* n = nullptr) : value(v), next(n){}
T value;
LN<T>* next;
};
void remove(LN<T>*& l) {
if (l == nullptr)
return;
for (LN<T>* p = l; p->next != nullptr; p = p->next)
{
if (p -> value == p -> next -> value)
{
LN<T>* to_delete = p;
p = p -> next;
delete to_delete;
LN<T>* to_delete2 = p;
p = p->next;
delete to_delete2;
break;
}
}
}
リンクリストの重複するペアを削除する関数を作成しようとしています。例えばforループで2回削除した後に変数を使用できません(リンクリスト)
1 - > 1 - > 2 - > 3 - > nullptr 2であるべきである - (これらは重複している場合、値の両方を除去する)Iが通過した
関数を呼び出した後> nullptr - > 3行ごとにデバッグして、何が間違っているかを見つけることができませんでした。デバッグでは、 "変数が利用できません"と表示されました。
私はそれを解決する手助けをすることはできますか?どうもありがとう。
'next'が' to_delete'を指しているノードがあり、今はランダムなゴミを指しています。あるいは、削除されている2つのノードがリストの先頭にある場合、 'l'はランダムなゴミを指すようになります。 –
テストケースには、リストの先頭に2つのノードが同じであることが含まれています。どのようにそれを修正するための任意の提案? – 12345