Possible Duplicate:
context switch during doubly linked list creation
我在读The Design of the UNIX Operating System (Maurice Bach)
他给出了下面一个双链表的例子。

struct queue{
    //pointers (back and forward)
    //other data
}*bp, *bp1

bp1->forp = bp->forp; //1

bp1->backp = bp; //makes sense
bp->forp = bp1; //makes sense

bp1->forp->backp = bp1; //2

我无法理解标记为12的语句的用途。1似乎是错误的,2看起来是多余的。
这是创建双链接列表的有效方法吗?

最佳答案

代码正确。
bp是一个双链接列表。
您希望将bp1作为列表中的第二项插入到bp中(这就是代码的作用)。
为此,需要设置4个指针:
bp1->forp应该指向列表中的第二个项目,bp->forp(上面的//1
bp1->backp应该指向列表中的第一项,bp
bp->forp应该指向插入的项,bp1
第二个项bp1->forp->backp的后指针应指向插入的项bp1。(//2以上)
编辑:
我们把结构称为A,B,C,D。。。
列表由A,C,D组成。。。插入之前我们要插入B(指向bp
bp1表示向前和向后指针。
之前:

bp --> A <-> C <-> D <-> E <-> ...
bp1--> B

之后:
bp--> A <-> B <-> C <-> D <-> E <-> ...

07-27 23:33