0

当我添加一个具有至少一个现有节点的节点时,我在弄清楚如何为 prev 和 next 设置我的 ptr 时遇到问题。添加第一个节点很容易,只需将 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;

    }
4

4 回答 4

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;

在此处输入图像描述

于 2013-11-06T22:20:38.773 回答
0

我不确定你为什么需要一个else if,因为我认为一个元素的情况与多个元素的情况没有什么不同。无论如何,您都存在语法错误-您想编写==而不是=.

更重要的是,您想要做的是:

  • 创建一个新的 qnode
  • 将新节点的数据设置为item
  • 将新节点的next设置在最前面
  • 设置新节点的prev为front->prev
  • 将前面的 prev 设置为新节点。

您可以在一张纸上自行检查这是如何工作的。

于 2013-11-06T22:11:20.457 回答
0

在循环双向链表中,您有 2 个指针,一个指向头部,一个指向尾部(列表中的最后一个元素)。如果一个元素有下一个,下一个元素的上一个应该是通过它的下一个元素指向它的元素。除非删除了 head 元素,否则您的 head 指针不应移动。您的尾巴将始终移动,以确保它指向的元素具有头部作为下一个元素。希望这会有所帮助

于 2013-11-06T22:13:24.660 回答
0

由于您总是在末尾添加,因此具有单个元素的队列的情况与具有多个元素的列表的情况相同。拿一张纸和一支笔,画一些草图,这对你来说会很容易。

于 2013-11-06T22:14:33.397 回答