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