C++语言程序设计

与链表中插入一个结点类似，要在链表中删除一个结点，也要先搜索原链表，找到要删除的结点指针及前一个结点的指针。假定有一个链表，其头指针为head。现要在该链表中删除一个数据域为data的结点，其代码如下：

| 例8-14

void Delete(node* &head，int data)
{
node * before, *current;
before = current = head;
//搜索链表，确定指针before和current
while (current!=NULL)
if(current->data == data) break;
else{
before = current;
current = current->next;
}
//删除数据域为data的结点
if(current!=0){
if(current == head){ //删除链表头结点
head = current ->next;
delete current;
}
else{ //删除链表中间结点
before ->next = current ->next;
delete current;
}
}
}

与在链表中插入结点类似，要删除链表中的某一个结点，也是改变链表相关结点之间的链接关系（参见图8-5、图8-6），但要处理结点插在链表头的情形。表头指针head定义为引用，也是为了Delete()函数返回后，能将head值带回到调用函数。
需要注意的是：链表结点删除后，应用delete释放该结点的内存，否则造成该结点内存泄露。如果链表为空或没有找到要删除的结点时，原链表保持不变。