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
我无法理解标记为
1
和2
的语句的用途。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 <-> ...