C++ 需要一些关于C+类的建议+;,双链表

C++ 需要一些关于C+类的建议+;,双链表,c++,list,pointers,C++,List,Pointers,我试图打印列表中的所有元素,但输出错误 代码得到2,0和10,当我调用过程“travel_in”时,它只显示0,2 如果对我的del_start()有一些疑问,它会删除0而不是2 我做错了什么 使用Cygwin在Windows 64位中编译 输出 21002 这是密码 #包括 #包括 使用名称空间std; 模板 类双表 { 受保护的: clalinode1; clali*listad; 公众: double\u list()//构造函数 { listad=NULL; } 无效插入(clali节点

我试图打印列表中的所有元素,但输出错误

代码得到2,0和10,当我调用过程“travel_in”时,它只显示0,2

如果对我的del_start()有一些疑问,它会删除0而不是2

我做错了什么

使用Cygwin在Windows 64位中编译

输出 21002

这是密码
#包括
#包括
使用名称空间std;
模板
类双表
{
受保护的:
clalinode1;
clali*listad;
公众:
double\u list()//构造函数
{
listad=NULL;
}
无效插入(clali节点1)
{
clali*温度;
温度=新类别;
*温度=节点1;
//检查列表是否为空
if(listad==NULL)
{
listad=温度;
listad->next=NULL;
listad->before=NULL;
}
其他的
{
temp->next=listad;
listad->before=temp;
temp->before=NULL;
listad=温度;
}
}
int vertam()
{
int res=0;
clali*温度;
temp=listad;
if(temp==NULL)
{
coutnext=temp2;
}
其他的
coutnext=temp2;
temp2->before=temp;
temp2->next=NULL;
}
clali clear_end()
{
类别b,*临时,*临时2;
int j=1;
temp=listad;
做
{
温度=温度->下一步;

cout我至少看到一个明显的错误。初步分析表明,
listad
类成员是指向双链接列表中第一个元素的指针。在这种情况下,以下内容显然是错误的(为便于阅读,请正确缩进代码):

此方法的目的是,显然,将新节点插入链表中间。

temp2
是新节点

    temp=listad;

    if(pos<vertam)
    {
        for(i=1;i<pos;i++)
            temp=temp->next;

由于一些不明确的原因,该代码试图将列表中间的现有节点的指针设置为列表的头。这是没有意义的,是错误的。

让我们一步一步地在<代码>主体()> /> >

当您第一次调用
insert_strt()时
参数
节点
具有成员
数据
的垃圾值。因此,在
测试列表
的开始处插入一个
整数
对象,该对象具有
数据
2和0的垃圾值。然后在列表的末尾分别插入
整数
对象

        temp->before=listad;
稍后,您将从
test_list
中删除第一个
clali
对象,该对象将删除其
data
字段中具有垃圾值的对象。因此,删除后,列表中的对象具有
data
值2和0的顺序

最后,您使用
travel\u in()
打印列表,但它不会执行您认为它可以执行的操作。它实际执行的操作是,如果列表中至少有一个元素,则它会打印列表中除最后一个元素外的所有元素。如果列表为空,则会导致分段错误(在
的条件下,而
循环为
temp
将为
NULL
)。因此它将打印:2(但您的列表有2和0)

您可以按如下方式编写
travel\u in()

void travel_in()
{
  clali *temp = listad;
  while(temp != NULL)
  {
    cout << temp->data << " ";
    temp = temp->next;
  }
  cout << endl;
}
void travel_in()
{
clali*temp=listad;
while(temp!=NULL)
{
下一步是收集数据;
}

不能,但我不明白,好吧,我明白你的意思,但为什么它会打印出2 0 10 2?这是我的疑问。。
        temp->before=listad;
void travel_in()
{
  clali *temp = listad;
  while(temp != NULL)
  {
    cout << temp->data << " ";
    temp = temp->next;
  }
  cout << endl;
}