【问题标题】:Finding Middle element of the Linked List查找链表的中间元素
【发布时间】:2013-07-10 14:20:30
【问题描述】:

我从一本书的链接列表中遇到了一个问题,但我无法理解它想说什么?

是:1. finding middle element but looking from starting。这些行是什么意思:

n is c????

LinkedListNode next = n.next;   // next= d;
6 n.data = next.data;  // n.data=d;
7 n.next = next.next; // c.next= e ??? 

我无法得到它,你能看看并告诉我吗?

实现一个算法来删除单个链表中间的一个节点,只允许访问该节点。

示例:
输入:链表 a->b->c->d->e
中的节点‘c’ 结果:没有返回任何东西,但是新的链表看起来像 a->b->d->e

解决方案:
只需将数据从下一个节点复制到这个节点,然后删除下一个节点。
注意:如果要删除的节点是链表中的最后一个节点,则无法解决此问题。没关系——你的面试官希望看到你指出这一点。在这种情况下,您可以考虑将其标记为 dummy。这是您应该与面试官讨论的问题。

1 public static boolean deleteNode(LinkedListNode n) {
2   if (n == null || n.next == null) {
3     return false; // Failure
4   }
5   LinkedListNode next = n.next;
6   n.data = next.data;
7   n.next = next.next;
8   return true;
9 }

这里,n 可能是什么?你能解释一下第 5,6,7 行吗?另外,如果n 是最后一个元素,为什么它不起作用?

我是链表的新手。我正在阅读它的所有示例,但真的被困在了这个上。

【问题讨论】:

  • 帖子和标题似乎不匹配。有两个问题吗?另外,您是对的,该算法不适用于最后一个元素。
  • @ZiyaoWei,, 没有。只有 1 个问题。我发布的问题。
  • @ZiyaoWei 为什么它不起作用...你也可以解释一下第 5,6,7 行吗?

标签: algorithm linked-list


【解决方案1】:

这个问题需要你从链表的中间删除一个节点,只给出要删除的节点的引用。

在这里,n 可能是什么?

n 可以是对链表中任何“中间”节点的引用,即,不是第一个或最后一个节点。

你能解释一下第 5,6,7 行吗?

问题是,由于链表不是双向链表,你不能在不破坏链表的情况下删除给你的节点(前一个节点将指向 null )。

例如如果我们要删除c,b会指向哪里?

a->b->c->d->e

a->b->     d->e

由于我们不知道 c 之前是什么节点,我们无法再次链接列表。所以解决方法是将d中的值复制到节点c中,然后删除节点d。然后列表没有损坏,并且您已从中删除了一个节点。那么老节点c实际上就代表了d节点,它将在节点e处继续链表。

a->b->c->d->e

a->b->d->e

这些行只是简单地从节点 d 复制数据并将其存储在节点 c 中,以便随后可以删除节点 d。

如果 n 是最后一个元素,为什么它不起作用?

如果 n 是最后一个元素,则列表中的下一个节点为空,因此我们没有可以复制到当前节点的任何内容。

【讨论】:

    【解决方案2】:

    您指出的行执行以下操作:

    n.data = next.data;
    

    从下一个节点复制数据;

    n.next = next.next;
    

    更改“now”节点的下一个链接;现在当前节点是“下一个”节点的相同副本,并且无法从列表的头部到达下一个节点。

    也就是说,这个算法实际上并没有删除当前节点——它把数据从下一个节点复制到当前节点,并从链中删除下一个节点,因此当前节点上的数据丢失了,并且当前节点作为下一个节点,下一个节点被有效删除。

    如果当前节点是最后一个节点,则 next.data 将抛出 NullPointerException。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-28
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      相关资源
      最近更新 更多