(四)单链接表算法之删除节点
思路分析
第一种情况:删除的节点不是尾节点
- 找到需要删除的某一节点;
- 保存删除节点的前一节点指针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}