【问题标题】:How to insert a new node to a single-linked list, where we do not have a pointer pointed to its head?如何将新节点插入到单链表中,我们没有指向其头部的指针?
【发布时间】:2011-12-14 11:40:58
【问题描述】:

给定一个指向单链表上的中间节点(非头,非尾)的指针。如何在给定指针指向的节点之前插入一个新节点?

例如, 给定单链表:

  A -> B -> C -> D -> E 

给定一个指向C的指针(ptr = &C),以及一个新的节点F,如何得到

 A -> B -> F -> C -> D -> E 

注意:我们没有指向 A 的指针。

谢谢

【问题讨论】:

  • 单链表无法做到这一点。您可以在之后插入一个节点 C,但不能在之前插入,因为您没有指向前一个节点的指针。
  • 嗯,something 必须指向 A。否则,它只是丢失了。
  • "something" 可能指向A,所以它不会丢失,是的。不过,这并不意味着插入 F 的代码可以访问那个“东西”。

标签: c++ algorithm list data-structures linked-list


【解决方案1】:

您应该能够通过在右侧插入一个新的 C 节点并在初始 C 节点的数据字段中写入 F 来实现这一点。

【讨论】:

  • 显然,您希望以其他顺序执行此操作。但是+1。
  • 如果我们想在 B 之前插入 F 怎么办?
  • 这不应该是可能的,而不是指向 C 的指针。现在为了争论,或者如果我的生活依赖于插入该节点,那么我想到的唯一想法是,如果你有一种方法可以跟踪通过 new 运算符的所有分配,您可以循环这些分配并将每个内存区域转换为列表节点结构,并查看 next 字段是否指向您当前的节点。如果是这样,您很可能已经找到了上一个节点。但是,我对 C++ 内存分配的了解还不够,无法告诉您这是否真的可行。
【解决方案2】:

显然,这是不可能的。如果您需要该功能,请使用双向链表。否则,总是传递一个指向列表头部的指针。

【讨论】:

    猜你喜欢
    • 2021-02-25
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多