总结一下最近所学的链表知识(蹲在楼道,手冷到打字僵硬🥶给我暖气啊!)
链表,形象记忆,即一段一段的小链节,勾起来变成一串长链子。相比于可以看成一整串数组,链子就可以拆卸,或者多加几节。这也就是链表的方便之处了——方便增删。
最简单的单链表,每一个小链节,都分为数据val部分,和指针*next部分。val存储所需要的数据,next指针指向下一个链节,以此把小链节连起来。这样,构成一串链表。
由此也不难看出,这些小的节点,可以在内存里“见缝插针”,随意找地方存储,反正有next指针在,用的时候能找着下一节点。而数组就像俄罗斯方块里的一大长条,还得找到足够大的、合适的位置才能放下它,这就是链表之于数组的又一大优点了——存储空间小。
现在详解节点。
第一个叫首元结点(也有叫头结点的,其实不太合适),定义一个头指针head指向首元结点。有时为了方便操作(为把首元结点也能当成普通节点处理),定义一个为空的头结点,其指针指向首元结点。最后一个结点的指针指向空。
对链表的操作。
基础的无非增删改查。找到要修改的位置,增:断开链子,该结点指针指向新增结点,新增结点指向后面结点;
删:要删的结点前一个结点的指针跳过它指向下一个(C++里别忘了释放要删的这个结点)
改:找到结点,修改值
查:这里又是上述三个操作的基础了。链表不能通过下标访问,只能从头开始往后遍历。通过cur->next=cur->next->next,指针后移实现。
联系题目:乐扣203