我一直在寻找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
实际上没有将next Node设置为null,而是将middle's
next 变量更新为空,这当然不会影响right_head
。
答案 0 :(得分:1)
如果您仔细观察所发布的代码段,在这种情况下,您将看到代码逐行执行。以下是分步说明:
1)middle
设置为指向最中间的节点。
2)left head
指向拆分左侧的第一个节点。
3)right head
指向拆分右侧的第一个节点,实际上是中间节点的下一个节点。
4)当middle.next
设置为null时,节点的链接断开,链接列表分为两半,其中left_head
和right_head
指向相应的左段和右段。
答案 1 :(得分:0)
right_head
被设置为 middle.next
为空。因此,它保留了在它变为null之前设置的任何值。
您没有发布整个代码段,所以我无法确定,但是鉴于merge sort
希望将数组分为两部分,对它们进行排序,然后组合在一起,它可能会重新选择middle
元素应进行下一步处理,这就是为什么在此操作之后会重置的原因。