单链表的插入和删除

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 } 

 

以上是关于单链表的插入和删除的主要内容,如果未能解决你的问题,请参考以下文章

单链表的初始化,创建,插入,删除和反转

单链表的插入和删除

单链表的基本操作(创建,删除,插入,逆置)

编写不带头结点单链表的插入操作和删除操作算法

数据结构单链表的增删查改,附代码+笔记gitee自取

单链表的初始化,整表创建,单个元素插入,单个元素删除,整表删除等操作