1.单链表定义
每个结点包含数据域和指针域,指针域存储下一个结点的地址。
2.插入操作
在第i个结点前面,插入一个e结点。
分析:
<1>.s->next = p->next;
如果想在第i个结点之前插入一个e结点,必须找到i结点前的i-1结点,在i-1结点以后插入e结点。
如上图:可以看出左边为i-1结点,右边为i结点。
s:表示指向e结点的指针,即e结点的地址。
p:表示指向i-1结点的指针,即i-1结点的地址。
s->next:表示指向e结点的s指针域存,储下一个结点的地址。
p->next:指向第i个结点的指针,即第i个结点的地址。
翻译:
将指向e结点的s指针的指针域(next),存储了第i个结点的地址(因为p指向i-1结点,p->next指向i结点).
<2>.p->next = s;
s:表示指向e结点的指针,即e结点的地址。
p:表示指向i-1结点的指针,即i-1结点的地址。
翻译:将指向i-1结点的指针p的指针域,存储了指向e结点的指针s(即e结点的地址)。
3.删除操作
删除第i个结点,其实就是把i结点跳过去。
分析:
<1>.p->next = q->next
p:指向i-1结点的指针,即i-1结点的地址。
q:指向i结点的指点,即i结点的地址。
翻译:
将指向i-1结点的指针p的指针域(next),存储了指向i结点的q的指针域的地址,其实q->next存储了第i+1结点的地址,这样就把第i个结点删除了。