首先在浏览本博客前,各位看客可以先去查看一下我过去的几篇博客。尤其是第一篇,即我对链表这个结构建立起的架构。
畅谈链表—初级篇1—谈谈链表结构本身
畅谈链表—初级篇2—谈谈链表的头指针与头结点
畅谈链表—初级篇3—谈谈链表的头插法与尾插法
插入操作
我们可以把插入操作看作是街区的扩建,那么这幢大楼选址完成且落成后,我们需要做的就是把新大楼前一幢房子的路牌指向这座新大楼,而把新大楼的路牌指向前一幢房子原来的路牌,话不多说,一图胜千言。
首先我们将新落成的2号房的路牌指向3号房,而3号房过去就是由1号房的路牌指向的(house1->next),其次再将1号房的路牌指向2号房。
house2->next = house1->next; // 1号房的路牌过去就指向3号房,即这里路牌已经存在了,我们没有必要再造一个路牌
house1->next = house2; // 新造一个路牌,让1号房的路牌指向新的2号房
很多初学者在刚开始写这个操作的时候会将路牌的顺序写反,让我们来具体分析一下他们到底错在哪里。
house1->next = house2;
house2->next = house1->next;
我们不难发现,我们首先造出了house1的路牌指向了新的2号房,那么此时的house1->next就已经变成了house2,那么这个house2的路牌指向自己是个什么鬼呢?是怕自己不够醒目嘛hhh…且这个街区的3号房的路牌也不复存在,来这个街区拜访的人们无法通过路牌找到3号房,这个街区就乱了套了,即这个链表出现了断链现象!
删除操作
而删除操作就更加简单了,我们把这个操作想象成拆除违建,在下面的例子中,我们假设3号房是豆腐渣工程,需要拆除,我们要做的就是改变2号房路牌的指向,而这个路牌可以用现成的,即过去这个3号房指向4号房的这个路牌。房子有问题,我们没必要和路牌过不去啊。
于是代码也不难写出
house2->next = house3->next; // house2的路牌改变指向,把原来house3的路牌直接给house2使用
free(house3); // 将house3拆除
熟练掌握插和删的操作是必要的!毕竟一个程序员什么都不会也一定要学会增改删查…