Edit
这是对名单的正确执行, 感谢你们,特别是 私下帮我的探员
<强度 > 正确链接的执行名单 强 >
#include <cstdio>
#include <cmath>
#include<iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
class Node{
friend class List;
public:
Node(Node* next, int wrt){
this->next = next;
this->wrt = wrt;
}
Node(const Node& obiekt){
this->wrt = obiekt.wrt;
this->next = obiekt.next;
}
//NIE MA DESTRUKTORA BO NIE ALOKUJE ZADNYCH DANYCH !!!
void show(){
cout<<this->wrt<<endl;
}
private:
Node* next;
int wrt;
};
class List{
public:
List(int wrt){
this->root = new Node(NULL, wrt);
}
List(const List& list)
{
// jesli pusty kopiujemy
if (list.root == NULL)
{
this->root = NULL;
return;
}
//tworzenie nowego korzenia
this->root = new Node(NULL, list.root->wrt);
Node* list_currentNode = list.root;
Node* this_currentNode = this->root;
while (list_currentNode->next != NULL)
{
// tworzenie nastepnika
Node* newNode = new Node(NULL, list_currentNode->next->wrt);
this_currentNode->next = newNode;
this_currentNode = this_currentNode->next;
list_currentNode = list_currentNode->next;
}
}
void add(int wrt){
Node* node = new Node(NULL, wrt);
Node* el = this->root;
while(el->next != NULL){
//el->show();
el = el->next;
}
el->next = node;
}
void remove(int index){
Node* el = this->root;
if(index == 0){
this->root = el->next;
delete el;
}
else{
int i = 0;
while(el != NULL && i < index - 1){
el = el->next;
i++;
}
if(el!=NULL){
Node* toRem = el->next;
Node* newNext = toRem->next;
el->next = newNext;
delete toRem;
}
}
}
void show(){
Node* el = this->root;
while(el != NULL){
el->show();
el = el->next;
}
}
~List(){
Node* currentNode = this->root;
while (currentNode != NULL)
{
Node* nextNode = currentNode->next;
delete currentNode;
currentNode = nextNode;
}
}
private:
Node* root;
};
int main(){
List* l = new List(11);
l->add(22); l->add(33);
l->show();
cout<<endl;
List* lala = new List(*l);
lala->show();
cout<<endl;
lala->add(44);
cout<<"lala before remove"<<endl;
lala->show();
lala->remove(1);
cout<<"l before delete"<<endl;
l->show();
cout<<"lala before delete"<<endl;
lala->show();
delete l;
/* cout<<"l after delete "<<endl;
l->show(); */
cout<<"lala after delete"<<endl;
lala->show();
return 0;
}
我已执行过清单,但有问题。我在清单中已经删除了不起作用的“毁灭者”:请看主页,看“删除后一页”,它会向后打印“I”列表。
最大的问题是去除方法 而不在内部变色 但当我试图删除 el/delete到Rem时 我进入无限循环
为什么这些线条, 特别是87条( 忘记100条) 导致程序崩溃, 当我叫 I- & gt; remove( 0) 时?
http://wklej.org/id/76056/" rel="不跟随 nofollown noreferrerr">http://wklej.org/id/76856/ Lines 87和100
<强 > 移动法和清单摧毁器很重要 强 >
void remove(int index){
Node* el = this->root;
if(index == 0){
this->root = el->next;
// delete el;
}
else{
int i = 0;
while(el != NULL && i < index - 1){
el = el->next;
i++;
}
if(el!=NULL){
Node* toRem = el->next;
Node* newNext = toRem->next;
el->next = newNext;
// delete toRem;
}
}
}
~List(){
Node* currentNode = this->root;
while (currentNode != NULL)
{
Node* nextNode = currentNode->next;
delete currentNode;
currentNode = nextNode;
}
}
整个代码
#include <cstdio>
#include <cmath>
#include<iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
class Node{
friend class List;
public:
Node(Node* next, int wrt){
this->next = next;
this->wrt = wrt;
}
Node(const Node& obiekt){
this->wrt = obiekt.wrt;
this->next = obiekt.next;
}
//NIE MA DESTRUKTORA BO NIE ALOKUJE ZADNYCH DANYCH !!!
void show(){
cout<<this->wrt<<endl;
}
private:
Node* next;
int wrt;
};
class List{
public:
List(int wrt){
this->root = new Node(NULL, wrt);
}
List(const List& list)
{
// jesli pusty kopiujemy
if (list.root == NULL)
{
this->root = NULL;
return;
}
//tworzenie nowego korzenia
this->root = new Node(NULL, list.root->wrt);
Node* list_currentNode = list.root;
Node* this_currentNode = this->root;
while (list_currentNode->next != NULL)
{
// tworzenie nastepnika
Node* newNode = new Node(NULL, list_currentNode->next->wrt);
this_currentNode->next = newNode;
this_currentNode = this_currentNode->next;
list_currentNode = list_currentNode->next;
}
}
void add(int wrt){
Node* node = new Node(NULL, wrt);
Node* el = this->root;
while(el->next != NULL){
//el->show();
el = el->next;
}
el->next = node;
}
void remove(int index){
Node* el = this->root;
if(index == 0){
this->root = el->next;
// delete el;
}
else{
int i = 0;
while(el != NULL && i < index - 1){
el = el->next;
i++;
}
if(el!=NULL){
Node* toRem = el->next;
Node* newNext = toRem->next;
el->next = newNext;
// delete toRem;
}
}
}
void show(){
Node* el = this->root;
while(el != NULL){
el->show();
el = el->next;
}
}
~List(){
Node* currentNode = this->root;
while (currentNode != NULL)
{
Node* nextNode = currentNode->next;
delete currentNode;
currentNode = nextNode;
}
}
private:
Node* root;
};
int main(){
List* l = new List(10);
l->add(12); l->add(13);
l->show();
cout<<endl;
List* lala = new List(*l);
lala->show();
cout<<endl;
lala->add(4);
cout<<"lala before remove"<<endl;
lala->show();
lala->remove(0);
cout<<"l before delete"<<endl;
l->show();
cout<<"lala before delete"<<endl;
lala->show();
delete l;
cout<<"l after"<<endl;
l->show();
cout<<"lala after delete"<<endl;
lala->show();
return 0;
}