当我添加一个至少有一个现有节点的节点时,我在确定如何设置我的ptr for prev和next时遇到了问题。添加第一个节点很简单,只需将ptrs设置为前面。我需要帮助查看这个心理,这个程序也是一个队列,所以每个节点都被添加到列表的后面。
if (Empty())
{
front = new qnode;
front->next=front;
front->prev=front;
front->data = item;
}
else if (front->prev=front)
{
front->prev = new qnode;
front->prev->next= front;
front->next=front->prev;
front->prev->data = item;
}
else
{
}
我现在还没有得到它
else
{
front->prev= new qnode;
front->prev->data= item;
front->prev->next=front;
front->prev=front->prev->prev;
}
答案 0 :(得分:3)
我希望这张图片有点
我为1项2项和3项
创建了图片指针只指向实际对象,意味着黑色矩形是整个对象,前面是蓝色,而prev是棕色(那些只是作为参考)
我真的希望这有助于链接列表变得非常棘手,绘图总能帮助我。
所以要在列表的前面添加项目,你有一些代码如下:
//ok first I'll define some variables for you
//last === the last node in the list
//head === the first node in the list
//node === the new node you are adding;
qnode node = new qnode;
node.data = data; //whatever data you are holding
node->next = last; //last element in the list since it is circular;
node->prev = head; //you want the new node to point the the first node since it's getting added before that;
head->next = node; //you want the head of the node to point to the new node not the last item
last->prev = node; //last node now should point to the new node you just added not the head;
答案 1 :(得分:0)
我不确定你为什么需要一个else if
,因为我认为一个元素的情况与多个元素的情况没有什么不同。在任何情况下,你都有语法错误 - 你想写==
而不是=
。
更重要的是,你想要做的是:
你可以在一张纸上检查一下它是如何工作的。
答案 2 :(得分:0)
在循环双向链表中,您有2个指针,一个指向头部,一个指向尾部(列表中的最后一个元素)。如果一个元素有一个next,那么下一个元素的prev应该是通过它的下一个元素指向它的元素。 除非移除头元素,否则不应移动头指针。你的尾巴将一直移动,始终确保它所指向的元素具有头部,因为它是下一个元素。 希望这有助于
答案 3 :(得分:0)
由于总是在末尾添加,因此具有单个元素的队列的情况与具有多个元素的列表的情况相同。拿一张纸和一支笔,做一些草图,这对你来说很容易。