Java 将两个链表按相反顺序反复合并并排序为第三个链表

Java 将两个链表按相反顺序反复合并并排序为第三个链表,java,recursion,linked-list,reverse,mergesort,Java,Recursion,Linked List,Reverse,Mergesort,我试图用Java(Node-sortedmerge(Node-node1,Node-node2))编写一个函数,其中node1和node2中的数据已经按降序排序({5,3,1,0})。我找到了函数的一个实现,但我不知道如何使其递归: //Defined elsewhere as a global variable static Node<Integer> head = new Node(); //Used to store the final sorted linked list

我试图用Java(
Node-sortedmerge(Node-node1,Node-node2)
)编写一个函数,其中
node1
node2
中的数据已经按降序排序({5,3,1,0})。我找到了函数的一个实现,但我不知道如何使其递归:

//Defined elsewhere as a global variable
static Node<Integer> head = new Node();
//Used to store the final sorted linked list

Node sortedmerge(Node node1, Node node2) {

    // if both the nodes are null
    if (node1 == null && node2 == null) {
        return null;
    }

    // if both of them have nodes present traverse them
    while (node1 != null && node2 != null) {

        // Now compare both nodes current data
        if (node1.data <= node2.data) {
            Node temp = node1.next;
            node1.next = head;
            head = node1;
            node1 = temp;
        } else {
            Node temp = node2.next;
            node2.next = head;
            head = node2;
            node2 = temp;
        }
    }

    // If second list reached end, but first list has
    // nodes. Add remaining nodes of first list at the
    // front of result list
    while (node1 != null) {
        Node temp = node1.next;
        node1.next = head;
        head = node1;
        node1 = temp;
    }

    // If first list reached end, but second list has
    // node. Add remaining nodes of first list at the
    // front of result list
    while (node2 != null) {
        Node temp = node2.next;
        node2.next = head;
        head = node2;
        node2 = temp;
    }
    return head;
}
//在别处定义为全局变量
静态节点头=新节点();
//用于存储最终排序的链接列表
节点分拣机(节点1、节点2){
//如果两个节点都为空
if(node1==null&&node2==null){
返回null;
}
//如果两者都有节点,则遍历它们
while(node1!=null&&node2!=null){
//现在比较两个节点的当前数据

如果(node1.data您的函数合并了两个已排序的列表,您可以使用如下所示的POST循环或递归循环来实现这一点。但是请注意:

  • 没有理由将
    head
    设为全局变量。您应该将其定义为局部变量,并将其返回为函数的返回值
  • 代码中的
    并不指向列表的头,而是指向最后一个元素,即尾部节点
  • 一旦其中一个列表用尽,您可以将另一个列表附加到合并列表的最后一个元素
  • sortedmerge
    的递归实现将需要与合并列表长度成比例的堆栈空间,这很容易超过可用堆栈空间,从而导致堆栈溢出异常
下面是一个简单的递归实现:

Node sortedmerge(Node node1,Node node2){
//如果任一节点为null,则返回另一个节点
if(node1==null){
返回节点2;
}
if(node2==null){
返回节点1;
}
//选择数据量最大的节点

如果(node1.data您的函数合并了两个已排序的列表,您可以使用如下所示的POST循环或递归循环来实现这一点。但是请注意:

  • 没有理由将
    head
    设为全局变量。您应该将其定义为局部变量,并将其返回为函数的返回值
  • 代码中的
    并不指向列表的头,而是指向最后一个元素,即尾部节点
  • 一旦其中一个列表用尽,您可以将另一个列表附加到合并列表的最后一个元素
  • sortedmerge
    的递归实现将需要与合并列表长度成比例的堆栈空间,这很容易超过可用堆栈空间,从而导致堆栈溢出异常
下面是一个简单的递归实现:

Node sortedmerge(Node node1,Node node2){
//如果任一节点为null,则返回另一个节点
if(node1==null){
返回节点2;
}
if(node2==null){
返回节点1;
}
//选择数据量最大的节点
if(node1.data)