数据结构非循环单链表的删除函数:
//删除节点,删除第pos个节点,pos的值从1开始 bool delete_list(PNODE pHead, int pos, int * pVal) { int i = 0; PNODE p = pHead; while (NULL != p->pNext && i < pos - 1) { p = p->pNext; ++i; } if (i > pos - 1 || NULL == p->pNext) return false; //如果程序能执行到这一行说明p已经指向了第pos-1个结点,并且第pos个节点是存在的 PNODE q = p->pNext; //q指向待删除的pos结点 *pVal = q->data; //删除的数据存放在pVal p->pNext = p->pNext->pNext; //删除p节点后面的pos结点 free(q); //释放q所指向的节点所占的内存 q = NULL; return true; }
理解在代码注释写了,代码运行过程理解如下:举例当pos的值为3的时候,运行过程图: