📌  相关文章
📜  用于合并两个已排序链表的Java程序,使得合并后的链表顺序相反(1)

📅  最后修改于: 2023-12-03 15:27:10.575000             🧑  作者: Mango

用于合并两个已排序链表的Java程序,使得合并后的链表顺序相反

在该程序中,您将学习如何合并两个已排序的链表并使得合并后的链表顺序相反。我们将使用Java语言来实现此项目。

实现方法

在Java中,我们可以使用递归的方法将两个已排序链表合并成一个链表。递归方法实现时,我们可以将递归函数的输入参数定义为两个已排序链表的头部节点。具体实现的步骤如下:

  1. 首先,我们检查两个链表的头节点是否为空。如果有一个为空,我们就直接返回另一个链表的头节点。
  2. 接着,我们比较两个头节点的值,将较小的节点作为合并后链表的头节点,并递归地将其与另一个链表的下一个节点合并。
  3. 最后,我们将合并后的链表反转,返回其头节点。

下面是递归方法的Java代码片段:

public ListNode merge(ListNode l1, ListNode l2) {
    if (l1 == null) return l2;
    if (l2 == null) return l1;
    if (l1.val < l2.val) {
        l1.next = merge(l1.next, l2);
        return l1;
    } else {
        l2.next = merge(l1, l2.next);
        return l2;
    }
}

public ListNode reverse(ListNode head) {
    ListNode prev = null;
    while (head != null) {
        ListNode next = head.next;
        head.next = prev;
        prev = head;
        head = next;
    }
    return prev;
}

public ListNode reverseAndMerge(ListNode l1, ListNode l2) {
    ListNode mergedList = merge(l1, l2);
    return reverse(mergedList);
}
使用方法

可以调用reverseAndMerge方法来合并两个已排序链表,并使得合并后的链表顺序相反:

ListNode l1 = new ListNode(1);
l1.next = new ListNode(3);
l1.next.next = new ListNode(5);

ListNode l2 = new ListNode(2);
l2.next = new ListNode(4);
l2.next.next = new ListNode(6);

ListNode mergedList = reverseAndMerge(l1, l2);

这样,mergedList就是合并后的链表,并且顺序是相反的。