Algorithm 按排序顺序合并两个链表的代码分析

Algorithm 按排序顺序合并两个链表的代码分析,algorithm,recursion,data-structures,merge,linked-list,Algorithm,Recursion,Data Structures,Merge,Linked List,伙计们,我试着按排序顺序合并两个排序的单链表。因此,我找到了一种递归方法来实现这一点。我试图理解代码,但无法完全理解!有人能帮我弄清楚吗。提前谢谢 以下是代码片段: Node MergeLists(Node list1, Node list2) { if (list1 == null) return list2; if (list2 == null) return list1; if (list1.data < list2.data) { list1.next = Merge

伙计们,我试着按排序顺序合并两个排序的单链表。因此,我找到了一种递归方法来实现这一点。我试图理解代码,但无法完全理解!有人能帮我弄清楚吗。提前谢谢

以下是代码片段:

Node MergeLists(Node list1, Node list2) {
 if (list1 == null) return list2;
 if (list2 == null) return list1;

 if (list1.data < list2.data) {
   list1.next = MergeLists(list1.next, list2);
   return list1;
 } else {
   list2.next = MergeLists(list2.next, list1);
   return list2;
 } 
}
节点合并列表(节点列表1、节点列表2){
if(list1==null)返回list2;
if(list2==null)返回list1;
if(list1.data
链接:


对不起,浪费了你的时间!:(

这是我可以添加到代码中的内容:

Node MergeLists(Node list1, Node list2) {
 if (list1 == null) return list2;      //Exit strategy
 if (list2 == null) return list1;      //Exit strategy

 if (list1.data < list2.data) {      //If current item in list1 is less than current 
                                     //item in list2 we put the item of list1 in our
                                     //sorted list and continue the algorithm recursivly
                                     //and add the node from recursive function to list1.next
   list1.next = MergeLists(list1.next, list2);
   return list1;
 } else {                            //exactly like above but this time we continue with list2
   list2.next = MergeLists(list2.next, list1);
   return list2;
 } 
}
节点合并列表(节点列表1、节点列表2){
if(list1==null)返回list2;//退出策略
if(list2==null)返回list1;//退出策略
if(list1.data
1.节点合并列表(节点列表1、节点列表2){
2.如果(list1==null)返回list2;
3.如果(list2==null)返回list1;
4.如果(列表1.data<列表2.data){
5.list1.next=合并列表(list1.next,list2);
6.返回列表1;
7.}其他{
8.list2.next=合并列表(list2.next,list1);
9.返回列表2;
10.  } 
11. }
最初,两个链表(LL1和LL2)中的每一个都将被(单独)排序。代码仅合并它们。用一个简单的示例进行说明

例如,LL1;
1->3->4

LL2:
6->8->9

由于
list1.data
(第4行)将始终为真(直到基本退出条件(第2行)),因此LL1将递归到末尾。最后,最后一个元素(LL1)的
下一个
将指向LL2的第一个元素(第5行)。这样,两个LLs将合并,我们将得到
1->3->4->6->8->9


当然,对于一个更复杂的例子,会有更多的递归。

该算法需要的堆栈空间与两个列表中的项目数成正比。如果您的列表甚至相当大,这将导致堆栈崩溃。
1. Node MergeLists(Node list1, Node list2) {
2.   if (list1 == null) return list2;
3.   if (list2 == null) return list1;

4.   if (list1.data < list2.data) {
5.     list1.next = MergeLists(list1.next, list2);
6.     return list1;
7.   } else {
8.     list2.next = MergeLists(list2.next, list1);
9.     return list2;
10.  } 
11. }