首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java合并排序链表

使用java合并排序链表
EN

Stack Overflow用户
提问于 2016-05-22 19:43:53
回答 1查看 223关注 0票数 0
代码语言:javascript
复制
private static void mergeSort(Node<Integer> head) {
    if (head==null || head.next == null) {
        return;
    }

    Node<Integer> temp1 = head;
    Node<Integer> temp2 = head;
    int count = 0;
    while (temp2 != null && temp2.next != null) {
        temp1 = temp1.next;
        temp2 = temp2.next.next;
        count++;
    }
    Node<Integer> list1 = head;
    Node<Integer> listTemp1 = list1;
    while (count > 0) {
        listTemp1 = listTemp1.next;
        count--;
    }
    Node<Integer> list2 = listTemp1.next;
    listTemp1.next = null;

    mergeSort(list1);
    mergeSort(list2);

    Node<Integer> finalHead = null;
    Node<Integer> finalTail = null;
    if (list1.data < list2.data) {
        finalHead = list1;
        list1 = list1.next;
    } else {
        finalHead = list2;
        list2 = list2.next;
    }
    finalTail = finalHead;

    while (list1 != null && list2 != null) {
        if (list1.data < list2.data) {
            finalTail.next = list1;
            finalTail = list1;
            list1 = list1.next;
        } else {
            finalTail.next = list2;
            finalTail = list2;
            list2 = list2.next;
        }
    }

    if (list1 == null) {
        finalTail.next = list2;
    } else if (list2 == null) {
        finalTail.next = list1;
    }

    return;

}

它抛出堆栈溢出错误。请帮助我纠正我的解决方案,我首先将我的链表分成两半,然后递归地发送它们,之后我将合并我的两个排序链表。当我递归调用我的第一个列表时,显示错误

EN

回答 1

Stack Overflow用户

发布于 2016-05-22 19:48:45

如果你有一个包含2个元素的列表,那么它会递归地调用这个方法:

代码语言:javascript
复制
   while (temp2 != null && temp2.next != null) {
        temp1 = temp1.next;
        temp2 = temp2.next.next;
        count++;
    }

计数将等于"1“

代码语言:javascript
复制
   Node<Integer> list1 = head;
    Node<Integer> listTemp1 = list1;
    while (count > 0) {
        listTemp1 = listTemp1.next;
        count--;
    }

listTemp1将指向第二个节点

代码语言:javascript
复制
   Node<Integer> list2 = listTemp1.next;
    listTemp1.next = null;
    mergeSort(list1);
    mergeSort(list2);

因此,从我看到的情况来看,list1将继续指向第一个节点,list2将继续指向null,请注意,listTemp1.nex = null实际上什么也不做,因为它已经指向了null

您可以通过减少计数来简单地解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37373885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档