これはかなり単純なプロジェクトで、私は約20時間を円で旅行中に何も進まずに過ごしました。私は最初に正しい方向に向かっているようだったが、私はそれを私に説明しようとしました、そして、それは私の脳を歪めて、私を正方形に戻しました。このC++シンプルリンクリスト実装の問題点は何ですか?
私はそれが最も単純なエラーであることを知っていますので、私は説明と同様にコードを投稿します。注:CPPは
void Intset::insert(int key)
{
Node * current;
current->num = key;
current->next = NULL;
assert (!find(key));
if(head == NULL)
{
head = current;
}
else if(head->num >= key)
{
head->next = head;
head = current;
}
else if(head->num < key)
{
head->next = current;
}
ファイルしたがって、この機能の背後にある私の思考プロセスは、(ソートされたリンクリストにキーを挿入)を作成することです
struct Node {
int num;
Node *next;
};
Hファイル内の関数は問題ではありません
をアサート新しいノードの現在の値を返し、そのnumフィールドにユーザーが入力したキーを入力し、次のフィールドをNULLにします。私の最初のチェックは、頭が空で、それが現在の内容をコピーしているかどうかを確認することです。私の2番目のチェックは、headのnumフィールドにユーザーが入力したキー以上の数値が含まれているかどうかを確認することです。
もしそうなら、私はヘッドノードを次のノードに移動し、それを現在のノードに置き換えます(前の小さな番号)。私の3番目のチェックは、頭の中の数字がユーザが入力したキーよりも小さいかどうかを調べ、もしそうなら、頭の次のフィールドを現在のもの(小さい番号が最初にくる)で埋めます。これまで私はsegフォールトエラーに遭遇しました。私は何が間違って割り当てられているのか分かりません。ここ
新しいノードのメモリを宣言する必要があります。そう簡単に挿入することはできません。 – Shravan40
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
リンクされたリストを把握する最も良い方法は、鉛筆と紙です。リスト内のノードを引き出します。ノード間の接続を描画します。次に、リストや他の関与するノードを操作して挿入や削除などの操作を行います。 – user4581301