(四)单链接表算法之删除节点
思路分析
第一种情况:删除的节点不是尾节点
删除的节点不是尾节点
- 找到需要删除的某一节点;
- 保存删除节点的前一节点指针pPrev;
- pPrev-> pNext = p ->pNext;
- 释放当前节点内存;第二种情况:删除的节点是尾节点
- 移动到尾节点
- 保存尾节点的前一节点指针pPrev;
- pPrev -> pNext = NULL;
- 释放删除节点空间。
代码实现
1/* 2 *pH :头节点 3 *data: 要删除节点的值 4 */ 5int dalete_node(struct node *pH,int data) 6{ 7 struct node *p = pH; //p用来指向当前节点 8 struct node *pPrev = NULL; //用来保存删除节点的前一个节点指针 9 while(NULL ! = p -> pNext) //循环遍历 10 { 11 pPrev = p; //先保存p到pPrev 12 p = p ->pNext; //移动到下一节点,这里跳过了头节点 13 if(p -> data == data) //找到删除的节点 14 { 15 if(NULL == p -> pNext) //判断是否为尾节点 16 { 17 pPrev -> pNext = NULL; //删除节点 18 //free(p); //释放节点 19 } 20 else 21 { 22 pPrev -> pNext = p -> pNext; //删除节点 23 //free(p); //释放节点 24 } 25 free(p); //释放节点 26 return 0; //删除成功,返回 27 } 28 } 29 printf("没有需要删除的节点.\n"); 30 return -1; 31}