リンクリストの学習を始めてから1週間が過ぎました。だから、今日私はC++で学んだリンクリストを実装しました。実行しようとしている間、コードは無限ループの無限ループに入ります。私はコードをデバッグしようとしましたが、コードで何が問題になっているのか分かりません。コードは以下の通りです。ヘルプdisplay()
が間違っている、手始めにappreciated.Thanks単独リンクリスト無限ループ
#include <iostream>
using namespace std;
struct node{
int data;
node * next;
};
class singly{
private:
node * head,*tail;
public:
singly(){
head=NULL;
tail=NULL;
}
void createNode(int value){
node * temp = new node;
temp->data=value;
temp->next=NULL;
if(head==NULL){
head=temp;
tail=temp;
temp=NULL;
}
else{
tail->next=temp;
tail=temp;
}
}
void display(){
node * temp = new node;
head=temp;
while(temp!=NULL){
cout << temp->data << "\t" << endl;
temp->next=temp;
}
}
void insert_end(int value){
node*newnode = new node;
node*temp = new node;
newnode->data=value;
newnode->next=NULL;
temp=head;
while(temp->next!=NULL){
temp = temp->next;
}
temp->next=newnode;
}
void delete_node(){
node*current = new node;
node*previous = new node;
current = head;
while(current->next!=NULL){
previous=current;
current=current->next;
}
tail=previous;
previous->next=NULL;
delete current;
}
};
int main(){
singly lists;
lists.createNode(32);
lists.createNode(654);
lists.createNode(34);
lists.createNode(234);
cout<<"\n--------------------------------------------------\n";
cout<<"---------------Displaying All nodes---------------";
cout<<"\n--------------------------------------------------\n";
lists.display();
cout<<"\n--------------------------------------------------\n";
cout<<"-----------------Inserting At End-----------------";
cout<<"\n--------------------------------------------------\n";
lists.createNode(55);
lists.display();
cout<<"\n--------------------------------------------------\n";
cout<<"-----------------Deleing At End-------------------";
cout<<"\n--------------------------------------------------\n";
lists.delete_node();
lists.display();
}
のように見えることができますか?コード全体をデバッグすることは期待できません。 – eshirima
'new'キーワードが何をしているかについていくつかの調査をすることをお勧めします。このコードから判断すると、実際に理解できません。 –
' display'と 'delete_node'の両方が壊れています。ノードをリストに追加する関数にのみ 'new'を書くべきです。ポインタを作成するために 'new'を使用しません - ' node * temp = head; 'は、' head'と同じ値を持つポインタを必要とする場合に必要なものです。 – molbdnilo