#c #oop #pointers #linked-list #segmentation-fault
#c #ооп #указатели #связанный список #ошибка сегментации
Вопрос:
Я пытаюсь добавить уже созданный узел в связанный список, передав указатель на указатель в качестве аргумента. Я не могу понять, как заставить его работать.
void List::add(Node* n, int pos){
if(pos > size)
pos = size;
if(pos == 0){
if (head == NULL){
head = n;
}
else{
Node* temp = head;
n->setNext(temp);
head = n;
}
}
else{
Node* temp = head;
int currPos = 0;
while(temp->getNext() != NULL amp;amp; currPos != pos){
temp = temp->getNext();
currPos ;
}
if(currPos == pos){
Node* next = temp->getNext();
n->setNext(next);
}
temp->setNext(n);
}
size ;
}
Я реализовал метод, который создает новый узел для каждого вызова, и он работает нормально, но мне нужно работать с уже созданными узлами.
Ниже у вас есть заголовочные файлы для списка и узла.
#pragma once
#include "Node.hpp"
#include <iostream>
class List{
Node* head;
int size;
public:
List();
List(const Teamamp;, Node* = NULL);
// List(const Listamp;);
// Listamp; operator=(const Listamp;);
~List();
void add(const Teamamp;, int = 0);
void add(Node*, int = 0);
void remove(const Teamamp;);
void removeLowest(int unqualNum);
void print() const;
void printNames(ostreamamp; o = cout) const;
int getSize() const;
Node* getHead() const;
};
#pragma once
#include "Team.hpp"
class Node{
Team value;
Node* next;
public:
Node(const Teamamp; = Team(), Node* = NULL);
// Node(const Nodeamp;);
// operator=(const Nodeamp;);
// ~Node();
Team getValue() const;
void setValue(const Teamamp;);
Node* getNext() const;
void setNext(Node*);
};
У меня есть другой стек классов, в котором я хочу использовать этот метод.
#pragma once
#include "Node.hpp"
#include "List.hpp"
#include <iostream>
class Stack{
Node* head;
int size;
public:
Stack();
Stack(const Teamamp;, Node* = NULL);
// Stack(const Stackamp;);
// Stackamp; operator=(const Stackamp;);
~Stack();
void push(const Teamamp;);
void pop();
void print(ostreamamp; = cout) const;
int getSize() const;
Node* getHead() const;
void toList(List* );
};
В методе ToList я пытаюсь переместить все узлы стека в список, переданный в качестве аргумента.
void Stack::toList(List* l){
Node *temp = head;
while(temp){
l->add(temp->getValue(), l->getSize()); // This works similar add method that build node inside
l->add(temp, l->getSize()); // This doesn't, the method with Node as parameter
temp = temp->getNext();
}
}
Комментарии:
1. Какую ошибку вы наблюдаете?
2. Я получаю ошибку seg.
3. И где именно вы получаете segfault, могу я спросить?
4. @StefanNastase Почему вы изначально создаете узлы вне списка? Это плохой запах кода. Только
List
класс должен создавать какие-либо узлы для себя.5. @CaptainTrojan я думаю, когда я устанавливаю следующий для * n