我已经获得了创建双链接列表的起始代码。我遇到的问题是实现一个函数,在“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;
}
}
现在的问题是,每当我插入一个项时,我应该创建一个具有不同内存地址的新类对象。我在上面所做的更新了相同的内存位置。我需要知道如何创建一个新的类对象。
你所做的是错误的,并且有潜在的危险(使用指向局部变量的指针)。您需要使用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
给定单链接列表: