强调:文中的所有ElemType指代任意变量,例如char、float、int甚至其它结构体变量;部分源码使用的是char,均经过作者验证可直接食用
单链表的插入
单链表的插入可以分为按位序插入和指定结点的前插和后插
按位序插入
按位序插入,则在链表的第i位插入一个结点,由于链表是物理结构为链式存储的线性表,其存储内存不连续,依靠结点中元素数据中的指针数据指向下一结点,因此要插入一个结点到第i个位置,只需要找到第i-1个元素,将其指针数据给插入结点的指针数据,并将自己的指针数据更新为指向i即可。
/*有头结点按为序插入:在链表L的第i位插入数据内容为e的结点*/
bool ListInsert(LinkList *L,int i,char e){
if(i<1) //判断i是否有效
return false; //i无效,插入失败
LNode *p=NULL; //当前结点
int j=0; //当前结点是第几个位置
p=*L; //初始化当前节点为头结点
while(p!=NULL && j<i-1){
//遍历找到第i-1个结点
p=p->next;
j++;
}
if(p==NULL) //i不合法
return false; //i不合法,删除失败
LNode *s=(LNode *)malloc(sizeof(LNode));//申请插入结点空间
if(s==NULL)