Я только что реализовал Связанный список. Он работает отлично, но даже жестко я видел нотацию. Я не могу создать рабочий деструктор на узле, поэтому он не реализован здесь в коде.Список деструкторов в C++
- Мне нужно реализовать рабочий деструктор на узле
- деструктор Список но это один простой, я просто использовать деструктор из класса Node (но мне нужно это).
- Сделать список удобным для узла, поэтому мне не нужно будет использовать getNext(), но я думаю, что могу справиться с этим сам (не знаю, как, но я узнаю).
Пожалуйста, посмотрите на код, это прекрасно, просто сработает, если вы его скопируете.
#include <cstdio>
#include <cmath>
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
class Node {
public:
Node(Node* next, int wrt) {
this->next = next;
this->wrt = wrt;
}
Node(const Node& obiekt) {
this->wrt = obiekt.wrt;
this->next = obiekt.next;
}
~Node() {}
void show() {
cout << this->wrt << endl;
}
int getWrt(){
return this->wrt;
}
Node* getNext(){
return this->next;
}
void setNext(Node* node){
this->next = node;
}
private:
Node* next;
int wrt;
};
class List{
public:
List(int wrt){
this->root = new Node(NULL, wrt);
}
List(const List& obiekt){
memcpy(&this->root,&obiekt.root,sizeof(int));
Node* el = obiekt.root->getNext();
Node* curr = this->root;
Node* next;
while(el != NULL){
memcpy(&next,&el,sizeof(int));
curr->setNext(next);
curr = next;
next = curr->getNext();
el = el->getNext();
/* curr->show();
next->show();
el->show(); */
}
}
void add(int wrt){
Node* node = new Node(NULL, wrt);
Node* el = this->root;
while(el->getNext() != NULL){
//el->show();
el = el->getNext();
}
el->setNext(node);
}
void remove(int index){
Node* el = this->root;
if(index == 0){
//deleting old one
this->root = this->root->getNext();
}
else{
int i = 0;
while(el != NULL && i < index - 1){
// el->show();
el = el->getNext();
i++;
}
if(el!=NULL){
Node* toRem = el->getNext();
Node* newNext = toRem->getNext();
el->setNext(newNext);
//deleteing old one
}
}
}
void show(){
Node* el = this->root;
while(el != NULL){
el->show();
el = el->getNext();
}
}
~List(){}
private:
Node* root;
};
int main(){
List* l = new List(1); //first list
l->add(2);
l->add(3);
l->show();
cout << endl;
List* lala = new List(*l); //lala is second list created by copy cosntructor
lala->show();
cout << endl;
lala->add(4);
lala->remove(0);
lala->show();
return 0;
}
Вы не должны быть 'memcpy'-ки' Node's, поскольку они не являются объектами POD. –
Я бы начал с исправления отступов и переименования переменных из 'n',' n2', 'wrt',' lala' в имена, имеющие какое-то значение. А также избавиться от 'using namespace std;' - это плохая практика, чтобы поместить его в начало такого файла. – LihO
Нет, это не домашнее задание. Я пытаюсь обновить свой C++. n прокомментированы, я удалю их сейчас. – Yoda