私はユーザから入力文字列を受け取り、文字列の文字を使って二重リンクリストを作成する必要があります。つまり、ユーザーの文字列を繰り返し処理し、二重リンクリストを生成する必要があります。私はforループを作成し、出力は機能しますが、出力を表示した直後にプログラムがクラッシュします。私はC++で2週間の経験を持っていますので、ルーキーの間違いを許してください。以下のコードを見つけてください。C++ Forループを使って二重リンクリストを作成する
#include<cstdlib>
#include<iostream>
#include <string>
using namespace std;
struct node {
string data;
node *next;
node *prev;
};
string getString() {
string userString;
cout << " Please enter a string for reversal: ";
cin >> userString;
return userString;
}
// print forward
void printDataFor(node* head);
// print reverse
void printDataRev(node* tail);
int main() {
node* head= new node;
node* tail= new node;
node* n;
string reverse = getString();
int length = reverse.length();
// loop to create linked list
for (int i = 0; i < length - 1; i++) {
if (head->prev == NULL) {
n = new node;
n->data = reverse[i];
n->prev = NULL;
head = n;
tail = n;
}
else {
n = new node;
n->data = reverse[i];
n->prev = tail;
tail->next = n;
tail = n;
}
}
n = new node;
n->data = reverse[length-1];
n->prev = tail;
tail->next = n;
tail = n;
tail->next = NULL;
// call to print reverse
printDataRev(tail);
}
// print forward
void printDataFor(node* head) {
node* temp = head;
while (temp != NULL) {
cout << temp->data;
temp = temp->next;
}
}
// print reverse
void printDataRev(node* tail) {
node* temp = tail;
while (temp != NULL) {
cout << temp->data;
temp = temp->prev;
}
}
別の問題は、初期化ループで 'head-> prev == NULL'が常に真であるということです。 –