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. }