双向链表插入结点分析和总结

主要是针对通用的插入结点时所需要注意的事项,对于深入了解具有指导意义。

可以通过画图来分析,会有种豁然开朗的感觉。

typedef struct DuLNode
{
 ElemType data;
 DuLNode *prior,*next;
}DuLNode,*DuLinkList;

1. 如果在链表中插入时仅仅指出直接前驱结点p,钩链时必须注意先后次序是: “先右后左”。部分语句组如下:

    s->next = p->next;   p->next->prior = s;
    p->next = s;         s->prior= p;    /*  钩链次序非常重要  */

2. 如果在链表中插入时仅仅指出直接后继结点p,钩链时必须注意先后次序是: “先左后右”。部分语句组如下:

    s->prior = p->prior;  p->prior->next = s;

    s->next = p;   p->prior = s;   /*  钩链次序非常重要  */

3. 如果插入时同时指出直接前驱结点p和直接后继结点q,钩链时无须注意先后次序。部分语句组如下:

    p->next = s;    s->next = q;
    s->prior = p;   q->prior = s;

 

你可能感兴趣的:(Data,Structure)