【问题标题】:How to merge two descending singly linkedlist into one ascending linkedlist using Recursion without any helper method?如何在没有任何辅助方法的情况下使用递归将两个降序单链表合并为一个升序链表?
【发布时间】:2020-10-09 22:16:43
【问题描述】:

我可以通过一次递归将两个降序 单链表合并为一个降序列表,但我不知道如何使结果升序 而不是创建任何辅助方法。

这是我将它们合并为降序的代码。我试图在此代码中进行修改以使其上升但失败了。请帮帮我~

public  Node mergeByRecursion(Node node1, Node node2) {
        if (node1 == null) {
            return node2;
        } else if (node2 == null) {
            return node1;
        }

        if (node1.value < node2.value) {
            node1.next = merge(node1.next, node2);
            return  node1;

        } else {
            node2.next = merge(node1, node2.next);
            return  node2;
        }

    }

这是我要解决的详细问题的图片。

更新

我找到了一个可行的解决方案,但不确定它是否是最佳解决方案并且是否 100% 符合要求,因此我发了另一篇帖子要求进行代码审查。以防万一,任何人也被这个问题所困扰,想知道一个潜在的解决方案。 Code Review

【问题讨论】:

  • 我现在没有时间正确分析/响应,但简而言之,使用递归反转链表相当于递归到列表的末尾,然后构建反向列表。递归。也许你可以把这个想法融入你现在拥有的东西中。
  • 非常感谢您的建议,由于没有助手的限制,我很挣扎。但我已经找到了一个至少可行的解决方案。

标签: java algorithm sorting merge singly-linked-list


【解决方案1】:

我想也许这会起作用:

public Node mergeByRecursion(Node node1, Node node2) {
    if (node1 == null) {
        return node2;
    }

    if (node2 == null) {
        return node1;
    }

    if (node1.getElement().value < node2.getElement().value) {
        node1.getNext() = mergeByRecursion(node1.getNext(), node2);
        return node1;

    } else {
        node2.getNext() = mergeByRecursion(node1, node2.getNext());
        return node2;
    }
}

  • 您可能不需要使用head_node var。

  • 您可以直接调用getNext(),因为列表已经排序。

【讨论】:

  • 很遗憾,我刚刚测试过了。它进入一个无限循环并打印相同的值。
猜你喜欢
  • 1970-01-01
  • 2017-03-27
  • 2017-04-03
  • 2018-01-04
  • 1970-01-01
  • 2014-04-08
  • 2014-04-25
  • 2022-12-05
  • 2019-05-28
相关资源
最近更新 更多