无法将节点附加到 linked-list c++
Trouble appending node to linked-list c++
我还是 C++ 的新手。我的 append() 函数有问题。我不允许更改此作业的参数。我认为问题是我误解了过去的论点。我相信这是头节点指针的地址?但是,当我编译 运行 和 driver 时,出现分段错误。
linkList.h
#include <iostream>
struct node {
int data;
node* next;
};
node* init_node(int data);
std::string report(node* head);
void append_data(node** head, int data);
void append(node** head, node* new_node);
linkList.cpp
#include "linkList.h"
using namespace std;
node* init_node(int data) {
node* newNode = new node;
newNode->data = data;
newNode->next = NULL;
return newNode;
}
string report(node* root) {
string nodeData;
if(root->next != NULL){
nodeData = to_string(root->data)+" ";
while (root->next != NULL) {
nodeData = nodeData+(to_string(root->data)+" ");
root = root->next;
}
return nodeData;
}else{
return "";
}
}
void append_data(node** head, int data) {
node* newNode = init_node(data);
append(head, newNode);
}
//function causing problem
void append(node** head, node* new_node) {
node* tmp = *head;
while (tmp->next != NULL) {
tmp = newHead->next;
}
tmp->next = new_node;
}
Driver
#include "linkList.h"
#inlcude "linkList.cpp"
int main(){
cout << "Testing Linked List" << endl;
node* empty_list = NULL;
cout << "Empty List Contents: " << report(empty_list) << endl;
append_data(&empty_list, 16); //causing error here
cout << "Empty List Contents after appending 16: ";
}
如果有语法错误,我深表歉意。我试着复制和粘贴只需要的东西,因为还有更多这个。
在驱动程序中:
node* empty_list = NULL;
但是在append()中,你使用的tmp->next which
是“empty_list->next
”,这样会造成segment fault
正如我上面所说,如果 tmp
为空,append
效果不佳。当您将新节点附加到列表时,附加到 空 列表是一种特殊情况:
void append(node** head, node* new_node){
node* tmp = *head;
if(tmp==NULL) {
*head = new_node;
return;
}
while (tmp->next != NULL) {
tmp = tmp->next;
}
tmp->next = new_node;
}
我还是 C++ 的新手。我的 append() 函数有问题。我不允许更改此作业的参数。我认为问题是我误解了过去的论点。我相信这是头节点指针的地址?但是,当我编译 运行 和 driver 时,出现分段错误。
linkList.h
#include <iostream>
struct node {
int data;
node* next;
};
node* init_node(int data);
std::string report(node* head);
void append_data(node** head, int data);
void append(node** head, node* new_node);
linkList.cpp
#include "linkList.h"
using namespace std;
node* init_node(int data) {
node* newNode = new node;
newNode->data = data;
newNode->next = NULL;
return newNode;
}
string report(node* root) {
string nodeData;
if(root->next != NULL){
nodeData = to_string(root->data)+" ";
while (root->next != NULL) {
nodeData = nodeData+(to_string(root->data)+" ");
root = root->next;
}
return nodeData;
}else{
return "";
}
}
void append_data(node** head, int data) {
node* newNode = init_node(data);
append(head, newNode);
}
//function causing problem
void append(node** head, node* new_node) {
node* tmp = *head;
while (tmp->next != NULL) {
tmp = newHead->next;
}
tmp->next = new_node;
}
Driver
#include "linkList.h"
#inlcude "linkList.cpp"
int main(){
cout << "Testing Linked List" << endl;
node* empty_list = NULL;
cout << "Empty List Contents: " << report(empty_list) << endl;
append_data(&empty_list, 16); //causing error here
cout << "Empty List Contents after appending 16: ";
}
如果有语法错误,我深表歉意。我试着复制和粘贴只需要的东西,因为还有更多这个。
在驱动程序中:
node* empty_list = NULL;
但是在append()中,你使用的tmp->next which
是“empty_list->next
”,这样会造成segment fault
正如我上面所说,如果 tmp
为空,append
效果不佳。当您将新节点附加到列表时,附加到 空 列表是一种特殊情况:
void append(node** head, node* new_node){
node* tmp = *head;
if(tmp==NULL) {
*head = new_node;
return;
}
while (tmp->next != NULL) {
tmp = tmp->next;
}
tmp->next = new_node;
}