|
10鱼币
这是小甲鱼带你学C带你飞 单链表3课后作业最后一题, 题目要求为用单链表实现通讯录功能, 请问delPerson()中为什么调用findperson()后已经定位到想要的指针位置还要在else中再进行重新定位,请懂得大哥帮我解答一下蟹蟹蟹蟹
findPerson() 函数确实定位到了需要删除的节点,但是在删除一个链表中的节点时,我们需要知道这个节点的前一个节点,因为我们需要将前一个节点的 next 指针更新为当前节点的 next。这样,我们就可以在链表中 "跳过" 这个节点,从而实现删除。
在 delPerson() 函数中,findPerson() 函数返回的是待删除的节点,但是我们还需要知道谁是它的前驱节点。这就是为什么在 delPerson() 函数的 else 块中,我们需要重新遍历链表,直到找到待删除的节点,并在此过程中记录下待删除节点的前驱节点。
- current = *contacts;
- previous = NULL;
- // current定位到待删除的节点
- while (current != NULL && current != person)
- {
- previous = current;
- current = current->next;
- }
复制代码
在这段代码中,current 变量用于遍历链表,而 previous 变量用于记录 current 变量的前一个节点。当 current 变量等于 findPerson() 返回的待删除节点时,previous 变量就是待删除节点的前驱节点,然后我们就可以根据 previous 和 current 删除当前节点。
|
最佳答案
查看完整内容
findPerson() 函数确实定位到了需要删除的节点,但是在删除一个链表中的节点时,我们需要知道这个节点的前一个节点,因为我们需要将前一个节点的 next 指针更新为当前节点的 next。这样,我们就可以在链表中 "跳过" 这个节点,从而实现删除。
在 delPerson() 函数中,findPerson() 函数返回的是待删除的节点,但是我们还需要知道谁是它的前驱节点。这就是为什么在 delPerson() 函数的 else 块中,我们需要重新遍历链表,直到找 ...
|