一共有4个问题
#include<iostream>
#include<string>
using namespace std;
class list
{
private:
int data;
list* next_node;
using lp = list*;
private:
lp head;
lp end;
public:
list() {};
list(int s)
{
this->head;
this->end = NULL;
head = end;
}
public:
void print();
void insert(int a);
};
void list::print()
{
lp cur = this->head;
while (cur != NULL)
{
cout << cur->data << "->" << endl;
cur = cur->next_node;
}
};
void list::insert(int a)
{
lp newnode;
lp tempt = this->head;
newnode = new list;
if (tempt == NULL)
{
this->head = newnode;
newnode->data = a;
newnode->next_node = NULL;
//问题1
//开始时head指向空
//当我执行了this->head = newnode;
// 这条语句后是在head指向的一块新的list空间
// 我存储的第一个data的数据应该是在那个list空间存储
//那这样的话为什么我在开始打印时是从head这个地址开始取data的地址的,照理说他应该第一次输出数据的时候应该
//找不到第一个data数据然后编译器才对啊
/*void list::print()
{
lp cur = this->head;
while (cur != NULL)
{
cout << cur->data << "->" << endl;
cur = cur->next_node;
}
};*/
}
else
{
if (tempt->next_node == NULL)
{
tempt->next_node = newnode;
newnode->data = a;
newnode->next_node = NULL;
}
if (tempt->next_node != NULL)
{
while(tempt->next_node != NULL)
{
//问题2
//按理说tempt->next_node!= NULL不是个死循环吗
//因为tempt = tempt->next_node;只是tempt的地址不断改变
// 而tempt->next_node地址没有改变,
// 那样的话整体不就是死循环吗
//可是他却可以输出
tempt = tempt->next_node;
}
//问题三
//tempt经过迭代以后,tempt的地址应该是倒数第二个,然后它指向倒数第一个list的空间
//然后tempt->next_node指向NULL
//那样的话tempt不会覆盖了原来这个元素的位置吗
tempt->data = a;
tempt->next_node = newnode;
newnode->next_node = NULL;
}
}
}
void test()
{
list p(1);
//使用含参构造函数原因
//默认构造函数会被多次调用,head会不断的被指向NULL,所以使用含参构造函数,这样一来head只会在开始时指向NULL
p.insert(4);
p.insert(8);
p.insert(1);
p.insert(3);
p.insert(55);
p.print();
}
int main()
{
test();
system("pause");
return 0;
}
为什么它第二个的数据的位置被跳过了