当前位置: 首页 > 知识库问答 >
问题:

为双链接列表创建类的新实例

岳浩宕
2023-03-14

我已经获得了创建双链接列表的起始代码。我遇到的问题是实现一个函数,在“head”处插入一个新创建的节点。

链表中的节点是以下结构:

template <class T>
struct ListItem
{
    T value;
    ListItem<T> *next;
    ListItem<T> *prev;

    ListItem(T theVal)
    {
        this->value = theVal;
        this->next = NULL;
        this->prev = NULL;
    }
};

头部插入的代码如下:

void List<T>::insertAtHead(T item)
{
     ListItem<int> a(item);     //create a node with the specified value

                   if(head==NULL)
                   {
                                 head=&a;   //When the list is empty, set the head
                                            //to the address of the node
                   }

                   else
                   {

                         //when the list is not empty, do the following.
                        head->prev=&a;
                        a.next=head;
                        head=&a;
                   }
}

现在的问题是,每当我插入一个项时,我应该创建一个具有不同内存地址的新类对象。我在上面所做的更新了相同的内存位置。我需要知道如何创建一个新的类对象。

共有1个答案

杜阳泽
2023-03-14

你所做的是错误的,并且有潜在的危险(使用指向局部变量的指针)。您需要使用new表达式分配一个新节点:

ListItem<int>* a = new ListItem<int>(item);

当然,当完成列表时,您必须记住使用删除释放内存。

 类似资料:
  • 我已经得到了实现双向链表的框架。我被PushFront()方法难住了。方法应该将提供的元素添加到链表的前面,并且应该将地址返回到新的头节点。我对如何访问列表的当前头部感到困惑,以便我可以将其分配给pNext指针。到目前为止,PushTop()方法看起来是这样的: 元素类构造函数: 数据类: 主要: 我的理解是,您通常会在调用PushFron()时提供头的地址,但是因为我没有提供,我不确定如何访问它

  • 我只想创建双链接列表并检查它是否为空。请说出错误。显示的错误是:在函数empty()中,head和tail超出范围。在类Dict中定义为struct时不起作用。

  • 我试图初始化一个双链接列表,其中包含另一个双链接列表中的虚拟节点(也包含虚拟节点)。例如,学生列表中的一个节点有许多朋友存储在该节点内的链接列表中。这是我的代码: 当我试图编译它时,它告诉我:警告:来自不兼容指针类型的赋值。它出现在我发表评论的台词上。请帮忙^^ 编辑:谢谢鸭嘴兽!

  • 实现 (Implementation) 该算法的实现如下 - #include <stdio.h> #include <stdlib.h> struct node { int data; struct node *next; }; struct node *head = NULL; struct node *current = NULL; //display the list void

  • 我正在尝试为一个项目创建一个双链接列表容器。我不能使用任何std容器。必须对双链接列表进行排序。以下是我目前的代码: 我遇到的问题是在我的插入函数中。我正在使用调试器,并在以下行插入代码:list.insert(10);。 它正确地进入第一种情况,即head==nullptr并创建节点。当我进入下一行代码(list.insert(20))时,它会用这一行创建一个节点:node*node=newno