只要懂了单链表的头插与尾插,双链表的就非常好理解了。对于这,我觉得用图形解释没一步是最好的方法。附上我自己对头插与
尾插的理解。
1.头插法在我学的过程中最难以理解的是s->next=L->next。解决方法:我是通过上面这幅图了解头插是如何一步一步插入元素,按步骤分析即可。
A:创建一个指针域为NULL,数据域为空的头节点L;
B:假设插入的节点为S,将头节点后面一个节点的地址(L->next)赋值给新节点S的指针域(S->next),在这一步中因为头结点后面没有节点了,即L->next=NULL,所以会得到s->next=NULL。然后再将s的地址赋给头节点即可;
C:在B的基础上,你会看到头结点后面有了一个节点,即L->next非空了,将1的地址给2,2的地址给头结点就完了;
D:同C。
A:创建一个头结点,并且定义一个尾指针,指向头结点(因为此时只有一个节点,头结点也是尾节点,所以尾指针指向头结点);(*********只需要记得L与r是共同体,修改r就等于修改L,这有助于理解第二步***********)
B:将新插入的节点s1的节点赋值给r->next,很可能要问,为什么不赋值给L->next?原因,尾插法,尾节点是一个动态的,他时刻处于变化之中,头结点L仅在开始时表示尾节点,其他时候不表示尾节点,所以要赋值给r->next;之后再将尾指针指向新插入的为节点就好了。
C:接下来就蛮好理解了,同上,我多画了几步,只是为了验证;
D:同上。
注意:需要注意的是像这种s->next有时他表示地址,有时他表示的是整个节点,注意下区分就可。
by 张辉
2014年10月22日