单链表的插入
在不带头结点的单链表中插入
在表首插入无前驱结点
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e2c1d2802faab887873fd18e988e22ac.png)
其他位置插入有前驱结点
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d112ee20c393f361b44ae5085f6c3b28.png)
在带头结点的单链表中插入
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8a7442d7b77cc8d5569222c5bf148c26.png)
插入部分代码实现
status ListInsert( LinkList &L, int i, ElemType e){
p=L; j=0;
while( p&&j<i-1 ) { p=p->next; j++; }
if( !p || j>i-1 ) return ERROR;
s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
单链表的删除
在不带头结点的单链表中删除
删除首元结点
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/00e4166d12d98f959d832b57cca48786.png)
删除其他位置元素
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/347c3bfc9bf2f02225df485a6693c217.png)
在带头结点的单链表中删除
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5a56811f59284d96375f59f98286fbfa.png)
删除部分代码实现
status ListDelete(LinkList &L, int i, ElemType &e) {
p=L; j=0;
while( p->next && j<i-1 ) {p=p->next; j++;}
if( !(p->next) || j>i-1 ) return ERROR;
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return OK;
}