从已经建好的链表中删除一个结点,而不破坏原链表的结构。删除结点时,首先要找到删除的结点并将要删除的结点与前后结点之间的链接断开;然后将前后结点链接到一起,这样删除的结点就从链表中删除了;最后,利用free ()函数释放已经删除的结点占用的内存空间。例如,将图10-2中的结点b删除后变成如图10-6所示。
图10-6 结点b删除后
结点a的next值修改为3818,即执行“a->next = b->next ;”语句。删除结点有以下两种情况,以图10-2中的链表进行说明。
(1)删除结点在表的中间。如果删除结点b,则执行“a->next = b->next;”语句。如果删除结点c,则执行“b->next = c->next;”语句。这种情况下,使被删除结点的前一个结点指向被删除结点的后一个结点。
(2)删除结点在表头。如果删除结点a,则执行“head = a->next;”语句。这种情况下,使head指向第二个结点。
例10.9 修改例10.8 的程序,从键盘输入一个要删除的学号并将删除后的链表输出。
编写程序:
创建一个名为“eg10_9.c”的新文件,在编辑窗口中输入下面的程序代码。(www.daowen.com)
运行结果:
程序说明:
deleteNode ()函数用于删除指定学号的结点。该函数有两个形参,head是链表的头指针,szStudentID存储的是要删除结点的学号。在该函数中,首先寻找被删除结点,若找到被删除结点,则删除它;接着,释放被删除结点所占的内存空间;最后,返回头指针head。
“strcmp (pb->szStudentNum, szStudentID) ==0”为真,表示找到了要删除的结点。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。