单链表的插入和删除
Posted suqf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表的插入和删除相关的知识,希望对你有一定的参考价值。
1 #define OKO 1 2 #define ERROR 0 3 typedef struct Lnode{ 4 ElemType data;//数据域 5 struct Lnode *next; //指针域 6 }Lnode,*Linklist; 7 Lnode *LocateElem_L(Linklist L,Elemtype e){ 8 //在链表中查找值为e的数据元素 9 Lnode *p; 10 p=L->next; 11 while(p&&p->data!=e) 12 p=p->next; 13 return p;//返回数据元素的地址 14 } 15 //按值查找 返回数据所在的位置 16 int LocateElem_L(Linklist L,Elemtype e){ 17 p=L->next; 18 j=1; 19 while(p&&p->data!=e){ 20 p=p->next; 21 j++; 22 } 23 if(p) return j; 24 else return 0; 25 } 26 //在第i个结点前插入值为e的新节点 27 Status ListInsert_L(Linklist L,int i,Elemtyoe e){ 28 p=L;j=0; 29 while(p&&j<i-1){ //寻找第i-1个元素 30 p=p->next; 31 ++j; 32 } 33 if(!p||j>i-1) return ERROR;//插入位置非法 34 s=new Lnode;s->data=e;//s=(Linklist)malloc(sizeof(Lnode)); 35 s->next=p->next; 36 p->next=s; 37 return OK; 38 } 39 //删除第I个结点 40 Status ListDelete(Linklist L,int i){ 41 p=L;j=0; 42 while(p&&j<i-1){ //寻找第i-1个元素 43 p=p->next; 44 ++j; 45 } 46 if(!(p->next)||j>i-1) return ERROR;//删除位置不合理 47 q=p->next;//临时保存被删除的结点 48 p->next=q->next;//改变删除结点前驱结点的指针域 49 delete q;//释放删除结点的空间 50 return OK; 51 }
以上是关于单链表的插入和删除的主要内容,如果未能解决你的问题,请参考以下文章