私はプログラムを書いて、それは動作しますが、私はそれをすべきではないと思います。誰かがそれがなぜ機能するのか説明できますか?私の再帰的リンクリスト削除機能がなぜ機能するのかよくわからないのですか?説明が大好きです
私は単独でリンクされたリストを持っています。私は直接コードが、病気の変化ビット
問題は私のリンクリストを貸し付けを投稿傾けるように、このプロジェクトのために、数字1、2のリストである3、4、4、5
私がする必要がありますリストをスキャンして重複を削除するには、4つのうちの1つを削除する必要があります。そして私は再帰を介してそれを行う必要があります。
私が書いている関数は、リストの先頭へのポインタとして引数/パラメータがあり、私は
//Base cases up here
if (pointer->value == pointer->next->value){
*toDelete = pointer;
pointer = pointer->next;
delete toDelete;
recur the function
} else recur(pointer->next);
このポインタを呼ぶ今、このコードは動作し、私はそれが理由だと思いますいけません私は、ノードiを削除した後に前のノードを接続しません。まだ結果を見ると、すべての適切なノードが接続され、削除されるはずのものはすべて削除されます。私はここで何か誤解していますか? ポインタ=ポインタ - >次のは、次のノードのアドレスにポインタを指すだけではありませんか?
ありがとうございます!
こんにちは、完全なコードを投稿できますか?私たちは、あなたが何かを省いている場合、あなたがしていること、あるいはしていないことを話すことはできません。 – Stefan
あなたが(*本当に*)単一リンクリストデータ構造を望んでいるなら、$ DEITYが好きな人は 'std :: forward_list'を使い、それを使ってください。お願いします。ホイールをひどく改造しないでください。さらに良いことに、 'std :: vector'を使うだけです。アルゴリズムの複雑さや他の理論的な事柄にかかわらず、いつもより実生活の状況において、より良いことが起こりそうです。 –
@JesperJuhl残念ながら、私は割り当てが指示するようにそれをしなければならない。私の選択ではありません。 – Duxa