双向链表指针P的节点前插入一个指针q的节点操作是什么? 操作是四个语句,那么这四个语句的顺序是固定的吗

2024-12-14 15:48:23
推荐回答(2个)
回答1:

lz的这个问题是一个很容易让人迷糊的问题。我来解释一下:
struct node {
struct node* prev;
struct node* next;
}*p, *q;
// 这里指针p和q的赋值操作省去
q->prev = p->prev; // -- 1
q->next = p; // -- 2
p->prev->next = q; // -- 3
p->prev = q; // -- 4

这里因为没有存下p的前一个指针,所以有顺序要求:
1. 语句4必须在1和3之后。(因为4中将p->prev赋新值之后,就无法得到原来p前的那个节点,所以这句留在最后)
2. 其他顺序任意。

回答2:

想想清楚这个过程就好,双向链表插入操作要保证双向性,就是做好链接,如果懂程序的话很简单了,看选项,画3个方块代表节点,画箭头代表双向的连接,然后根据给出的步骤画一画看会不会 出错就很明显了