AG8:
だから私は、新しいリンクされたリストを作成していると私はトラブルリンクリストの末尾に新しいノードを挿入を抱えています。私は、リストを横断の異なる反復を試みたが、私はこの問題は、私がノードを挿入しようとして終わりだと思います。
#include <iostream>
using namespace std;
//Make a basic linked list and understand how it works -- displaying -- insert at end
class Node {
public:
string m_name;
Node *m_next;
};
class LinkedList {
public:
Node *m_head;
int m_size;
LinkedList() { //constructor
m_head = nullptr;
m_size = 0;
}
void InsertAtEnd(Node *ptr) { //we must traverse to the end
Node *temp = m_head;
while (temp != nullptr) {
temp = temp->m_next;
}
temp->m_next = ptr->m_next;
}
void Display() {
Node *temp = m_head;
if (temp == nullptr) {
cout << "The linked list is empty!" << endl;
}
else {
while (temp->m_next != nullptr) {
cout << temp->m_name << " ";
temp = temp->m_next;
}
}
}
};
int main() {
//creates the pointers
Node *first = nullptr;
Node *second = nullptr;
//create nodes using pointers
first = new Node();
second = new Node();
//add names to nodes
first->m_name = "Mike";
second->m_name = "Ethan";
//insert these pointers into a newly constructed linked list
LinkedList MyList;
MyList.InsertAtEnd(first);
MyList.InsertAtEnd(second);
MyList.Display();
return 0;
}
cigien:
あなたは、あなたのコードをステップにデバッガを使用する必要があります。あなたの関数で
void InsertAtEnd(Node *ptr) { //we must traverse to the end
Node *temp = m_head;
while (temp != nullptr) {
temp = temp->m_next;
}
temp->m_next = ptr->m_next; // but temp is nullptr. BOOM
}
あなたはまで反復されtemp
ていますnullptr
。しかし、その時点で、やってはtemp->m_next
UBです。あなたはただその前に停止する必要があります。また、あなたがリンクアップすべきptr
ではなく、ptr->m_next
void InsertAtEnd(Node *ptr) { //we must traverse to the end
Node *temp = m_head;
while (temp->m_next != nullptr) { // look ahead
temp = temp->m_next;
}
temp->m_next = ptr; // just ptr
}
もちろん、あなたも、リンクされたリストが空である場合には、追加のチェックをしなければなりません
void InsertAtEnd(Node *ptr) { //we must traverse to the end
if (m_head == nullptr)
m_head = ptr;
else {
Node *temp = m_head;
while (temp != nullptr) {
temp = temp->m_next;
}
temp->m_next = ptr->m_next;
}
}
あなたの表示機能に反対のことをやっているように見えます。あなたはまでそこ繰り返す必要がありtemp
、IS nullptr
。そうしないと、最後の要素を印刷されません。
また、しないでください using namespace std;