链表合并问题的合并排序的Java实现

时间:2019-07-16 02:20:44

标签: java linked-list mergesort

我一直在寻找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

2 个答案:

答案 0 :(得分:1)

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

1)middle设置为指向最中间的节点。
2)left head指向拆分左侧的第一个节点。
3)right head指向拆分右侧的第一个节点,实际上是中间节点的下一个节点。
4)当middle.next设置为null时,节点的链接断开,链接列表分为两半,其中left_headright_head指向相应的左段和右段。

答案 1 :(得分:0)

之前 right_head被设置为

middle.next为空。因此,它保留了在它变为null之前设置的任何值。

您没有发布整个代码段,所以我无法确定,但是鉴于merge sort希望将数组分为两部分,对它们进行排序,然后组合在一起,它可能会重新选择middle元素应进行下一步处理,这就是为什么在此操作之后会重置的原因。