双链列表节点插入位置

时间:2018-08-14 06:35:48

标签: c++ c++11 pointers data-structures doubly-linked-list

我目前正在研究双向链接列表,想问些什么。这是在特定位置插入节点的功能。

“ 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; 即使没有此功能,该功能也能完美运行。

我知道要插入特定位置,您需要从头开始并遍历该位置(位置1),然后将位置的下一个指针设置为temp,将temp的下一个指针设置为position的下一个指针,并将temp的上一个指针设置为position 。但这可以通过以下三行代码来实现

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

那么此行temp->next->prev=temp;的用途是什么 这行是什么意思?

2 个答案:

答案 0 :(得分:3)

由于您在ss->next之间插入了一个节点,并且它是一个双链表,所以s->next的上一个节点应指向新插入的节点,其中{{ 1}},因此是temp

答案 1 :(得分:1)

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

您要在它们之间插入第三个节点“ temp”。

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

df.txt <- data.frame(
    variable = c("Loc1", "Loc2", "Loc3", "Loc4"),
    x = c(2, 2, 2, 2),
    y = c(1, 1, 1, 1),
    label = paste0("Text in facet ", 1:4))


x %>%
    gather(variable, value, -Parameter) %>%
    ggplot(aes(x = Parameter, y = value, fill = variable)) +
    geom_bar(stat = "identity", position = "dodge")+
    facet_grid(. ~ variable) +
    geom_text(data = df.txt, aes(x, y, label = label))

此行将使前向链接从temp变为n: temp-> n

temp->next = s->next

此行将向后链接从n添加到温度。

换句话说,这可以读为temp->next->prev=temp 这只是使从n到temp的向后链接 temp <-n

(temp->next)->prev=temp

这将添加从s到温度的前向链接: s-> temp

s->next=temp

这将添加从temp到s的反向链接: s <-temp

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