Java 将两个链表按相反顺序反复合并并排序为第三个链表
我试图用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
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)