0

List と Int を引数として受け取り、int を挿入して、int がリストに存在しない場合は true、既に存在する場合は false を返す 1 つの bool 関数を実装しようとしています。この関数で数時間作業しています。 、およびif-elseステートメントはソートされたintを挿入できます。問題(およびクラッシュ)は、値がすでに存在するかどうかを確認してfalseを返す方法です。ここに私の関数があります:構造体の宣言

typedef struct E_Type * List;
struct E_Type
 {
  int data;
  List next = 0;
 };

と機能

bool insert(List & l, int data)
{   

   List current = l;
       do{//check if the int is already in the list
          current->data;
          current = current->next;
        //return false;
     }while (current->data == data);

      if (l == 0 || l->data > data){
              List new_list = new E_Type;
              new_list->data = data;
               new_list->next = l;
               l = new_list;
           return true;
      }

       else if(l->data < data){
             insert(l->next, data);
           return true;
     }



  }
4

1 に答える 1

1
do{
      //this line doesn't really do anything...
      current->data;
      //moving current forward, good.
      current = current->next;
 //If current->data is less than data in the list, it will exit the loop here anyway.
}while (current->data == data);

また、リストの最後に到達したかどうかも確認していません。おそらく、あなたがやろうとしていることは次のようなものです:

//This is correct for for iterative approach, but I don't think this is really what you need, either...
while(current != null) {
    if (current->data == data)
        return false;
    current = current->next;
}

ただし、再帰関数でこのチェックを行うために、このような反復を使用したくない可能性があるため、代わりに、そのビット全体を次のように置き換えます。

if (current->data == data)
   return false;

再帰呼び出しで正しい値を返すには、次のように変更する必要があります。

else if(l->data < data){
     insert(l->next, data);         //Recursive call
     return true;  //you don't want to just return true, return what the recursive call returns!
}

に:

else if(l->data < data){
     return insert(l->next, data);
}
于 2012-12-05T22:20:57.470 に答える