目录
1. 按位序插入_带头结点
这里讨论时 假设单链表中只有4个结点。
注意:这里和顺序表不同的地方 => 对 i 的合法性用了一个 if 判断,以及 while 循环结束后对是否为 NULL 的判断。 因为链式表和顺序表不同点之一在于,链式表不支持随机存取,只能通过 next 指针遍历查找。
2. 按位序插入_不带头结点
考试中两种情况都会考察!
指定结点的后插操作
然后代码就可以修改成:
指定结点的前插操作
3. 按位序删除_带头结点
ListDelete(&L,i,&e):删除操作,删除表L中第i个位置的元素,并用e返回删除元素的值
指定结点的删除
要删除结点p ,还需要修改其前驱节点的 next 指针。
又由于单链表没办法往前检索,所以没办法找到其前驱结点。除非像上面代码,传入一个头指针,从链表头一次寻找p的前驱结点。第二种方法类似前插操作的偷天换日!
但是如果要删除的是单链表的最后一个结点的话,上面代码中的 p->data = p->next->data 会出现问题。这种情况只能从表头一次寻找,知道找到其前驱结点。考试时,迫不得已写这个,最多扣一分!!
这些代码都要会写,都重要!!!
打牢基础。慢慢加速!!!!
体会封装的好处!!!