给定链表中要删除的节点的指针。如何在 main 函数中传递指向节点的指针?

Given a pointer of node to be deleted in a linked list . how will you pass a pointer to the node in main function?

假设我有一个列表 [10 20 30 40 50 60] 我想删除一个数据值为 40 的节点,如何从 main() 函数传递该节点的指针?

我知道如果我想删除 10 我可以简单地通过 head 如果我想删除第二个节点那么我可以通过 head->next,但是如果列表太大并且假设我想删除怎么办第 70 个节点?

总的来说,无论长度如何,你都必须采取这种方法,

  • 开始遍历链表节点,从头开始,一个接一个
  • 到达特定节点,查看数据值。

    • 如果匹配,则更新指向下一个(前一个)节点的指针。
    • 如果没有匹配,移动到下一个节点。
  • 继续,直到到达叶节点。

关于传递节点,你可以简单地传递指向要释放的节点的指针,并从删除函数中释放内存。在调用删除函数之前,您需要进行必要的更改以重新对齐列表,不包含要删除的节点。

编写代码,如果您遇到任何问题,我们很乐意提供帮助。

如果是单链表,必须在删除指针前传一个指针

例如C++中的标准单链表std::forward_list有如下删除节点的方法

iterator erase_after(const_iterator position);
iterator erase_after(const_iterator position, const_iterator last);

问题是您必须更新已删除节点之前的节点。如果列表是单链表,则节点只有到下一个节点的链接。它们没有指向前面节点的链接。

否则必须遍历整个链表,在函数中找到要删除的传递指针

没有区别

if I want to delete 2nd node then i can pass head->next,

if the list is so big and suppose I want to delete 70th node

因为函数不知道它确实是第2个节点还是第70个节点。:)

但是如果您在搜索操作后跟踪列表中的位置,您的生活会更轻松。