2012-05-06 6 views
0

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

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

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

currNULLであれば、それは(まあ、UBがされるようにクラッシュするようになります。

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; 
    } 
} 
} ` 
+0

を使用すると、すべての夜働いてきた場合、私はあなたはそれがクラッシュした場所を告げて気にしないと確信している、またはノードのためのコードを示します。 –

+0

構造体ノード {//コンストラクタ ノード(CONST T&ヴァル= T()、ノード* next-ptrを= NULL):データ(val)で、次の(next-ptrを){} //データメンバー Tデータ、 ノード* next; }; public: SLList(); SLList(const SLList&lst2); 〜SLList(); CONST SLList&演算子=(CONST SLList & rhs); INTサイズ()constは、 ボイドプリント()constは、 (constのT&ヴァル)CONSTを見つけるBOOL; ボイド追加(CONST T & val); 空隙削除(CONST T & val); private:。 Nodeは* head; }; – nullPointer2

+0

Nodeは、コピーコンストラクタであると、それはloop – nullPointer2

答えて

0

また、前方prev = currを移動:

while(curr != NULL && curr->data < val) { 
    prev = curr; 
    curr = curr->next; 
    cout << "add"; 
} 
+0

最初の値を追加するだけです。残りの値を追加していません – nullPointer2

+0

whileループの後に 'prev-> next = tmp;'またはそれに類するものがありません。 –

+0

ありがとう男それは働いた! – nullPointer2

1

while終了条件が反転していただきありがとうございます正確)を確認してからNULLを確認します。

+0

を。。?同じループの中でまだクラッシュしています。 – nullPointer2

+0

@ user1141641何行? –

+0

私は考えていないがwhileループwhile – nullPointer2