双向链表的插入问题

来源:百度知道 编辑:UC知道 时间:2024/05/12 20:26:24
struct Link {
Link *LeftLink; // 指向链表中左端LINK对象的指针;
Link *RightLink; //指向链表中右端LINK对象的指针;
CState *Data; // 指向状态数据的指针;
};
class CLList {
private:
Link* LeftPointer; // 指向一个永远是空的,并且是末端的link对象;
Link* RightPointer; //与上面的指针一样,但方向相反;
double ListLen; // 链表的长度;
}
NewLink->RightLink = LeftPointer->RightLink;
NewLink->LeftLink = LeftPointer;
LeftPointer->RightLink = NewLink;
NewLink->RightLink->LeftLink = NewLink;

插入的最后一句NewLink->RightLink->LeftLink = NewLink;为什么不直接写成RightPointer->LeftLink = NewLink;

你写的这个程序看上去是头插入,如果改成RightPointer->LeftLink = NewLink,就相当于最初只有leftpointer和rightpointer的时候的插入了。NewLink->RightLink->LeftLink = NewLink,这种写法是考虑了原来链表中有元素的情况,你的改法没有考虑这个,所以是错误的。

插入时需要改四个指针,插入元素的两个指针和插入点左元素的右指针以及右元素的左指针。

双向链表 a->b a<-b 两个方向的,必须同时修改两个指向。