【问题标题】:Java implementation of Merge Sort for Linked List splitting issue用于链接列表拆分问题的合并排序的 Java 实现
【发布时间】:2019-11-24 17:13:49
【问题描述】:

我一直在看Java中的合并排序实现,但不明白以下部分:

Node middle = getMiddle(head);      //get the middle of the list
Node left_head = head;
Node right_head = middle.next; 
middle.next = null;             //split the list into two half's

所以通过设置 middle.next = null 我们将 left_head 分割为中间。但是为什么 right_head 仍然存在,因为它指的是 middle.next 变成了 null

更新:好的,所以让我感到困惑的是middle.next = null 实际上并没有将下一个节点设置为空,而是将middle's next 变量更新为 null,当然不会影响right_head

【问题讨论】:

标签: java linked-list mergesort


【解决方案1】:

如果您仔细观察您发布的代码段,您会发现在这种情况下代码是逐行执行的。以下是分步说明:

1) middle 设置为指向最中间的节点。
2)left head指向分割左侧的第一个节点。
3)right head指向分裂右边的第一个节点,其实就是中间节点的下一个。
4)当middle.next设置为null时,节点的链接被破坏,链表分裂成两半,其中left_headright_head分别指向对应的左右段。

【讨论】:

    【解决方案2】:

    right_head 被设置之前 middle.next 变为空。所以它保存了在它变为 null 之前设置的任何值。

    您没有发布整个代码段,所以我无法确定,但鉴于merge sort 想要将数组分成两部分,对它们进行排序,然后将它们组合起来,它可能会重新选择@987654324 @ 下一次它应该排序的元素,这就是它在这个之后重置的原因。

    【讨论】:

      猜你喜欢
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 2022-01-10
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多