【问题标题】:Creating a new instance of a class for a doubly linked list为双向链表创建类的新实例
【发布时间】:2013-02-07 10:59:25
【问题描述】:

我获得了用于创建双向链表的起始代码。我遇到的问题是实现一个在“头部”插入新创建的节点的函数。

链表中的一个节点是如下结构:

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;
                   }
}

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

【问题讨论】:

  • 是的,我一直在尝试。出于某种原因,我无法正确使用语法。是 ListItem a=new ListItem
  • 这不是C,我去掉了标签。

标签: c++ class linked-list


【解决方案1】:

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

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

当然,完成列表后,您必须记住使用delete 释放内存。

【讨论】:

  • 感谢您的回答。我犯了一个非常愚蠢的错误。这只是我的第二门 C++ 课程,我已经有一段时间没有接触编程了。再次感谢。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 2016-06-10
  • 2018-03-14
相关资源
最近更新 更多