单链表插入
- 从头开始遍历列表
- 找到第i-1个节点
- 将指针域指向第i-1个节点的next
- 新建节点s值为data
- 将next指向data
单链表删除
- 从头开始遍历列表
- 找到第i-1个节点
- 将指针域从第i-1个节点的next指向第i+1个节点
- 释放第i个节点的内存空间
代码
插入
void enterlist(node l,int i,int e){//单链表的插入 在第i个位置 插入值为e的数据元素
node p,s;//新建两个结点指针
int k=0;
if(i<=0)printf("插入的位置不合理\n");
p=l;//从头开始遍历
while(p!=NULL&&k<i-1) {//查找第i-1个结点
p=p->next;
k++;
}
if(p==NULL){//当遍历完整个表也没找到时,说明插入位置不合理
printf("插入的位置不合理\n") ;
}
s=(node)malloc(sizeof(node));//新建一个结点S
s->data=e;
s->next=p->next;// 因为p时第i-1个结点 故 s的指针域应该指向第i个结点
p->next=s;
printf("插入成功!\n");
}
删除
void dellist(node *l,int i){//单链表删除操作 删除第i个元素
node p,r;
int k=0;
p=l;
while(p->next!=NULL&&k<i-1){
p=p->next;
k++;
}
if(p->next==NULL){
printf("删除位置不合法!\n");
}
r=p->next;
p->next=r->next;//修改指针删除结点
printf("删除的元素是%d\n",r->data);
free(r);//释放内存空间
}