单链表的查找、插入和删除运算的实现过程

简单的单链表操作,权当复习练手,高手请绕过。

单链表的查找运算: LinkList Find_List(LinkList L,int k)/*L为带头节点单链表的头指针*/ /*在表L中查找第K个元素,若找到,则返回该元素节点的指针;否则,返回空指针NULL*/ { LinkList p; int i; i=1;p=L->link;/*初始时,令p指向第一个元素节点,i为元素计数器*/ while(p&&i<k){/*顺指针向后查找,直到p指向第k个元素节点或p指向空*/ p=p->link;i++; } if(p&&i==k)return p;/*存在第k个元素且指针p指向该元素节点*/ return NULL;/*第k个元素不存在*/ }/*Find_List*/ 单链表的插入运算: int Insert_List(LinkList L,int k,int elem)/*L为带头节点单链表的头指针*/ /*将元素elem插入表中的第k个元素之前,若成功则返回0,否则返回-1*/ { LinkList p,q; /*p指向第k-1个元素节点,q指向新申请的节点*/ /*将元素elem插入表中的第k个元素之前等同于将元素插入在第k-1元素之后*/ if(k==1) p=L; /*元素elem需要插入在第一个元素之前*/ else p=Find_List(L,k-1);/*查找表中的第k-1个元素并令p指向该元素节点*/ if(!p) return -1; /*表中不存在第k-1个元素,插入操作失败*/ q=(NODE *)malloc(sizeof(NODE)); if(!q) return -1; q->data=elem; q->link=p->link; p->link=q; /*元素elem插入第k-1个元素之后*/ return 0; }/*Insert_List*/ 单链表的删除运算 int Delete_List(LinkList L,int k) /*L为带头节点单链表的头指针*/ /*删除表中的第k个元素节点,若成功返回0;否则,返回-1*/ { LinkList p,q; /*p指向待删除节点的前去节点,q指向待删除的节点*/ /*删除第k个元素,相当于令第k-1个元素节点中的指针指向第k+1个元素的节点*/ if(k==1) p=L; /*需要删除第一个元素节点*/ else p=Find_List(L,k-1); /*查找表中的第k个元素并令p指向该元素节点*/ if(!p||!p->link) return -1; /*表中不存在第k-1个元素,删除操作失败*/ q=p->link; /*令q指向待删除的第k个元素节点*/ p->link=q->link; free(q); /*删除节点并释放节点空间*/ return 0; }/*Delete_List*/

你可能感兴趣的:(list,null,delete,insert)