单链表
只要创造两个数组,一个储存数据,另一个储存地址,理论上来讲就可以模拟链表。
数组头插法模拟
如图所示,头插法就是将插入节点与储存地址的数组建立联系,再改变左指针指向。
1:初始化。让头结点head=-1表示NULL,并且让idx=0。idx在此处存放要用到的下标,每用一次,idx++。2:建立联系。先储存数据。val[idx]=x。再建立联系。ne[idx]=head。若第一次插入,就表示ne[idx]此时=Null。
3:改变指向。head=idx。最后idx++。这里可以理解为head是一个指针。idx也可以理解为记录了操作次数。
在下标为k的数据后插入节点。
总体方法与头插法一样,只是将head换成了ne[k]。
删除节点
只需要改变指向。
双链表
双链表是在原单链表的基础上,新增加了一个反方向的指针。即每个元素都有左指针l[]右指针r[]。插入原则也是先储存数据,再建立联系,再改变指向。
建立联系时是双向建立,并且在改变指向的时候,一定要先进行l[r[k]]=idx,再进行r[k]=idx的操作。若先进行后者,r[k]会被改变。