要实现递增排序链表的合并,可以采用归并排序的思想:将两个已经排好序的链表合并成一个更大的有序链表。
步骤如下:
-
首先,判断两个链表是否为空,若有一个为空,则返回另一个链表。
-
然后,比较两个链表的头结点的值,将值小的头结点作为新链表的头结点。
-
接着,递归地对剩余的部分进行合并,将小的节点插入到新链表的末尾。
下面是Java代码实现:
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class MergeSortedList {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;
}
ListNode head = null;
if (l1.val < l2.val) {
head = l1;
head.next = mergeTwoLists(l1.next, l2);
} else {
head = l2;
head.next = mergeTwoLists(l1, l2.next);
}
return head;
}
}
让我们通过两个示例来说明这个代码的工作原理。
示例1:
假设有两个链表l1和l2:
l1: 1 -> 3 -> 5 -> null
l2: 2 -> 4 -> null
则合并后的链表head应该是:
1 -> 2 -> 3 -> 4 -> 5 -> null
代码执行过程:
-
第一次递归,l1.val=1,l2.val=2,所以head=l1,l1.next=mergeTwoLists(l1.next, l2)递归调用后返回1->2->3->4->5->null。
-
第二次递归,l1.val=3,l2.val=2,所以head=l2,l2.next=mergeTwoLists(l1, l2.next)递归调用后返回3->4->5->null,此时head=2->3->4->5->null。
-
第三次递归,l1=null,l2.val=4,所以head=l2,l2.next=mergeTwoLists(l1, l2.next)递归调用后返回5->null,此时head=2->3->4->5->null。
-
最后返回head=1->2->3->4->5->null,即是合并后的链表。
示例2:
假设有两个链表l1和l2:
l1: 1 -> 3 -> null
l2: 2 -> 4 -> 6 -> null
则合并后的链表head应该是:
1 -> 2 -> 3 -> 4 -> 6 -> null
代码执行过程:
-
第一次递归,l1.val=1,l2.val=2,所以head=l1,l1.next=mergeTwoLists(l1.next, l2)递归调用后返回1->2->3->4->6->null。
-
第二次递归,l1.val=3,l2.val=2,所以head=l2,l2.next=mergeTwoLists(l1, l2.next)递归调用后返回3->4->6->null,此时head=2->3->4->6->null。
-
第三次递归,l1=null,l2.val=6,所以head=l2,l2.next=mergeTwoLists(l1, l2.next)递归调用后返回null,此时head=2->3->4->6->null。
-
最后返回head=1->2->3->4->6->null,即是合并后的链表。
综上所述,以上是实现递增排序链表合并的完整攻略及两条示例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java编程实现递增排序链表的合并 - Python技术站