假设我有一个列表[10 20 30 40 50 60]我想删除一个数据值为40的节点,我该如何从main()
函数传递该节点的指针?
我明白如果我想删除10,我可以简单地传递head,如果我想删除第二个节点,那么我可以传递head->下一步,但是如果列表如此之大,假设我想删除第70个节点怎么办?
通常,无论长度是多少,都必须采用
方法- 开始遍历链表节点,从头开始,一个接一个。
到达特定节点,检查数据值
- 如果匹配,将指针更新到下一个(前一个)节点。
- 如果没有匹配,移动到下一个节点。
直到到达叶节点
关于传递节点,您可以简单地将指针传递到要释放的节点,并从删除函数中释放内存。在调用删除函数之前,需要进行必要的更改以重新排列列表,而不包含要删除的节点。
写代码,如果你有任何问题,我们很乐意帮助。
必须在被删除的指针之前传递一个指针,前提是它是一个单链表。
例如,c++中的标准单链表std::forward_list
有以下方法来删除节点
iterator erase_after(const_iterator position);
iterator erase_after(const_iterator position, const_iterator last);
问题是必须更新被删除节点前面的节点。如果列表是单链表,则节点只有到下一个节点的链接。它们没有到前面节点的链接。
否则,你必须在遍历整个列表的函数中找到要删除的传递指针。
如果我想删除第二个节点,那么我可以传递head->下一步,
和
如果列表这么大假设我想删除第70个节点
因为函数不知道它是第2个节点还是第70个节点:)
但是如果您在搜索操作后跟踪列表中的位置,则可以使您的工作更轻松。