Как объединить два нисходящих односвязных списка в один восходящий связанный список с помощью рекурсии без какого-либо вспомогательного метода? - PullRequest
2 голосов
/ 19 июня 2020

Я могу объединить два нисходящих односвязных списков в один нисходящий список с помощью только одной рекурсии, но я не знаю, как сделать, чтобы результат возрастал без создания вспомогательных методов.

Это мой код для их объединения в порядке убывания. Я пытался изменить этот код, чтобы он увеличивался, но мне это не удалось. Пожалуйста, помогите мне ~

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;
        }

    }

Вот изображение подробного вопроса, который я пытаюсь решить.

Picture of the original question

UPDATE

I have figured out a solution that works, but not sure if it is the best solution and fits the requirement 100% so I made another post for asking a code review. In case, anyone also gets stuck by this question wanna know a potential solution. Проверка кода

1 Ответ

0 голосов
/ 19 июня 2020

Думаю, может это сработает:

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(), так как списки уже отсортированы.

...