带头节点的循环双链表 我应该在C++中实现一个带有头节点的循环双链表。

带头节点的循环双链表 我应该在C++中实现一个带有头节点的循环双链表。,c++,data-structures,linked-list,doubly-linked-list,C++,Data Structures,Linked List,Doubly Linked List,我的教授给了我这个算法,但我不明白它的用途 我应该在哪里以及如何使用preced、follow和out 在prefore中有一个“p”,我不知道它从何而来,在follow方法中的r也是如此,在out方法中的p和r也是如此,但我认为它们可能只是一个新的E2*,所以我创建了这个 class E2 { public: E2* prev; E2* next; int key; E2() { prev = this; next = th

我的教授给了我这个算法,但我不明白它的用途

我应该在哪里以及如何使用preced、follow和out

prefore
中有一个“p”,我不知道它从何而来,在
follow
方法中的r也是如此,在
out
方法中的p和r也是如此,但我认为它们可能只是一个
新的E2*
,所以我创建了这个

class E2 {

public:
    E2* prev;
    E2* next;
    int key;

    E2() {
        prev = this;
        next = this;


    };


};

void precede(E2* q, E2* r) {

    //insert (*q) before (*r)

    E2* p = new E2();
    p = r->prev;
    q->prev = p;
    q->next = r;
    p->next = r->prev = q;



}

void follow(E2* p, E2* q) {

    E2* r = new E2();

    r = p->next;
    q->prev = p;
    q->next = r;
    p->next = r->prev = q;


}

void out(E2* q) {

    E2* r = new E2();
    E2* p = new E2();

    p = q->prev;
    r = q->next;
    p->next = r;
    r->prev = p;
    q->prev = q->next = this;
}
在out方法中,“this”给了我一个错误,它说:
“this”只能在prefore方法中的非静态成员函数中使用:
p是一个临时变量。它用于命名R之前的任何节点。想象一个包含两个节点a和R的双链接列表。Prefore方法将在R之前插入一个节点Q。下面的步骤是:

  • 将R前面的节点标记为p。因此,A被标记为p。现在我们将在p和R之间插入Q
  • 将p作为Q的上一个节点,R作为Q的下一个节点。p的下一个节点仍然是R。同样,R的上一个节点仍然是p。我们在下一步中改变这一点
  • 将Q标记为p的下一个和R的上一个
  • 您可以使用相同的逻辑来理解follow函数

    在remove方法中,p和r是q的上一个和下一个节点。在这里,我们需要在它们之间创建一个双链接(即将r标记为p的下一个,将p标记为r的上一个)。这将删除节点q


    希望这有帮助。

    E2*p=new E2();p=r->prev这里您失去了指向刚刚分配的节点的指针。这些函数更常见的名称是“preced”=“push front”和“follow”=“push back”。正如下面回答的,
    p
    只是一个临时变量(不是分配的节点),并按照函数描述中所示进行分配。“this”在“out”方法中的含义是什么?this指针保存当前对象的地址,简单地说,这个指针指向类的当前对象。参考