0

私は、ソートされた方法で整数を追加する add 関数で問題が発生した単一のリンクされたリストに取り組んでいます。しかし、私のプログラムはクラッシュし続けます。私は一晩中働いていましたが、問題を見つけることができませんでした。誰もこれについて何か考えがありますか?

ありがとうございました

template<typename T>
class SLList
{
private:

struct Node
{

Node(const T& val= T(), Node* next_ptr=NULL) : data(val), next(next_ptr) { }

// data members
T data;
Node *next;
};


 template<typename T>

void SLList<T>::add(const T& val)
{
 if (find(val)==false)
  {
 Node *curr= head;
 Node* prev=NULL;
  if(head->next==NULL)
  {
      cout<<"head";
      Node *tmp=new Node(val,head->next);
      head->next=tmp;
      return;
  }
  else
  {
  while(curr->data < val && curr!=NULL)
  {
      curr=curr->next;
      prev=curr;
      cout<<"add";
  }

Node *tmp=new Node(val, prev->next);
//head->next=tmp;
  }
}
}    `
4

2 に答える 2

1

while終了条件は逆です。

while(curr->data < val && curr!=NULL)

する必要があります

while( curr!=NULL && curr->data < val )

currの場合NULL、チェックする前にクラッシュします (正確には UB) NULL

于 2012-05-06T14:59:59.690 に答える
0

また、次のようにprev = curr進めます。

while(curr != NULL && curr->data < val) {
  prev = curr;
  curr = curr->next;
  cout << "add";
}
于 2012-05-06T15:13:06.263 に答える