我们上节讲解了链表的建立,本节讲解的是在链表中指定位置中插入一个结点,以及在指定位置中删除一个结点
指定位置插入一个结点
这里我们在第3个结点后插入一个结点,可以将新结点赋值给第三个结点的next,将原来的第4个结点赋值给新界点的next,这里新结点就成立第4个结点了,上代码
voidList_IndexInsert(LNode**root,ElemTypedata,intindex){ LNode*node=*root; if(node==NULL) { return; } if(index==1) { LNode*item=calloc(1,sizeof(LNode)); assert(item); item-data=data; item-next=node; (*root)=item; return; } intcount=1; while(true) { if(count+1==index
node-next==NULL) { LNode*item=calloc(1,sizeof(LNode)); assert(item); item-data=data; if(node-next==NULL) { item-next=NULL; } else{ item-next=node-next; } node-next=item; break; } else{ node=node-next; count++; } }}
删除一个结点
链表的删除可以将删除位置的后一个结点赋值给前一个结点的next,然后将删除位置的结点释放即可,上代码
voidList_Delete(LNode**root,intindex){ LNode*node=*root; if(node==NULL) { return; } if(index==1) { (*root)=(*root)-next; free(node); return; } intcount=1; while(true) { if(count+1==index
node==NULL) { if(node==NULL) { break; } structLNode*next=node-next; if(next!=NULL) { node-next=next-next; } break; } else{ node=node-next; count++; } }}
这里代码就编写完成了,来测试一下代码
voidmain(){ LNode*node=NULL; LNode*node1=NULL; List_TailInsert(node,1); List_TailInsert(node,2); List_TailInsert(node,4); List_IndexInsert(node,3,3); List_Delete(node,3); while(true) { printf("%d\n",node-data); if(node-next==NULL) { break; } node=node-next; }}