Программа на Java для объединения двух отсортированных связанных списков в новый список
Опубликовано: 21 Января, 2022
Нам дается два отсортированных списка, и наша цель - объединить эти два списка в новый список. Для этого мы должны написать одну функцию, которая будет принимать два списка в качестве аргумента, которые сортируются в порядке возрастания. Эта функция объединит эти два списка в один список в порядке возрастания.
Вход Список 1: 1-> 3-> 4-> 9-> 10 Список 2: 2-> 5-> 6-> 9 Выход Новый список: 1-> 2-> 3-> 4-> 5-> 6-> 9-> 9-> 10
У нас есть два подхода к решению этой проблемы:
- Итеративный
- Рекурсивный
Метод 1: итерационный подход
- Идея этого подхода заключается в том, что мы возьмем один дополнительный узел в новом списке, который является головным узлом списка.
- Мы возьмем одну переменную из списка типов, которая всегда находится в последнем узле списка, чтобы упростить добавление нового узла.
- Мы будем повторять цикл и проверять наличие меньшего элемента из обоих списков и добавлять этот узел в результирующий список.
- Если мы достигли конца любого списка, мы просто добавим оставшиеся узлы из второго списка.
Implementation:
Java
// Java Program to Merge Two Sorted// Linked Lists in New List// Iteratively import java.io.*; public class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; }} class GFG { public static ListNode mergeTwoLists(ListNode l1, ListNode l2) { // New List ListNode result = new ListNode(-1); // variable to point the last node of the list. ListNode p = result; // Iterate the loop while (l1 != null && l2 != null) { // Find the smaller element and append it to the // list. if (l1.val <= l2.val) { p.next = l1; l1 = l1.next; } else { p.next = l2; l2 = l2.next; } // Update the variable p = p.next; } // If anyone list become empty append the remaining // list element of othe list. if (l1 == null) { p.next = l2; } else if (l2 == null) { p.next = l1; } // Return the resultant list without first extra // node return result.next; } // A utility function to print linked list static void printList(ListNode node) { while (node != null) { System.out.print(node.val + " "); node = node.next; } } // Driver code public static void main(String[] args) { ListNode head1 = new ListNode(1); head1.next = new ListNode(3); head1.next.next = new ListNode(5); // 1->3->5 LinkedList created ListNode head2 = new ListNode(0); head2.next = new ListNode(2); head2.next.next = new ListNode(4); // 0->2->4 LinkedList created ListNode mergedhead = mergeTwoLists(head1, head2); printList(mergedhead); }} |
Output
0 1 2 3 4 5