c ++理解循环双向链表

时间:2013-11-06 22:04:18

标签: c++

当我添加一个至少有一个现有节点的节点时,我在确定如何设置我的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;

    }

4 个答案:

答案 0 :(得分:3)

我希望这张图片有点enter image description here

我为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;

enter image description here

答案 1 :(得分:0)

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

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

  • 创建新的qnode
  • 将新节点的数据设置为项目
  • 将新节点的下一个设置为前面
  • 将新节点的prev设置为front-> prev
  • 将前端的prev设置为新节点。

你可以在一张纸上检查一下它是如何工作的。

答案 2 :(得分:0)

在循环双向链表中,您有2个指针,一个指向头部,一个指向尾部(列表中的最后一个元素)。如果一个元素有一个next,那么下一个元素的prev应该是通过它的下一个元素指向它的元素。 除非移除头元素,否则不应移动头指针。你的尾巴将一直移动,始终确保它所指向的元素具有头部,因为它是下一个元素。 希望这有助于

答案 3 :(得分:0)

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