双向链表节点插入位置

Doubly linked List Node insertion at position

我正在研究双向链表,想请教一下。这是在特定位置插入节点的功能。

"temp"是指向节点的指针。

void insertpos(int value,int pos)
    {
        node *s;
        temp=new node;
        s=head;
        for(int i=0;i<pos-1;i++)
        {
            s=s->next;
        }
        temp->data=value;
        if(s->next==nullptr)
       {
           s->next=temp;
           temp->next=nullptr;
           temp->prev=s;
       }
       else
       {

           temp->next=s->next;
           temp->next->prev=temp;
           s->next=temp;
           temp->prev=s;
       }
    }

这行代码是什么意思temp->next->prev=temp; 即使没有这个,该功能也能完美运行。

我了解要在特定位置插入,您需要从头开始并遍历到该位置(position-1)并将该位置的下一个指针设置为temp,将temp的下一个指针设置为position的下一个指针和temp的前一个指针定位。但是可以通过下面三行代码实现

temp->next=s->next;
       s->next=temp;
       temp->prev=s;

那么这条线有什么用temp->next->prev=temp; 这行是什么意思?

由于你在ss->next之间插入了一个节点,它是一个双向链表,所以s->next的前一个节点应该指向新插入的节点temp,因此 temp->next->prev=temp;

考虑两个节点:s<==>n

你想在它们之间插入第三个节点'temp'。

让我们逐行看看最后4行代码的含义

temp->next = s->next

这一行将使向前link从temp到n:temp->n

temp->next->prev=temp

此行将 backward link 从 n 添加到 temp。

换句话说,这可以读作(temp->next)->prev=temp 这只是使向后 link 从 n 到 temp temp<-n

s->next=temp

这会将 link 从 s 向前添加到 temp:s->temp

temp->prev=s

这将从 temp 到 s 向后添加 link:s<-temp

结合所有 links,我们得到:s<==>temp<==>n