题目
输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。
思路
我们的分析从合并两个链表的头结点开始。链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点将是合并后链表的头结点。在两个链表中剩下的结点依然是排序的,因此合并这两个链表的步骤和前面的步骤是一样的。我们还是比较两个头结点的值。因此可以用递归的方法。
代码
采用递归的方法
public class MergeSortedLists {
public static ListNode mergesorted(ListNode head1, ListNode head2) {
if(head1==null)
return head2;
if(head2==null)
return head1;
if(head1.val<head2.val) {
head1.next=mergesorted(head1.next,head2);
return head1;
}
else {
head2.next=mergesorted(head1,head2.next);
return head2;
}
}
public static void main(String[] args) {
ListNode node1= new ListNode(1);
ListNode node2= new ListNode(3);
ListNode node3= new ListNode(5);
ListNode node4= new ListNode(7);
node1.next=node2;
node2.next=node3;
node3.next=node4;
node4.next=null;
ListNode node5= new ListNode(2);
ListNode node6= new ListNode(4);
ListNode node7= new ListNode(6);
ListNode node8= new ListNode(8);
node5.next=node6;
node6.next=node7;
node7.next=node8;
node8.next=null;
ListNode node=mergesorted(node1,node5);
while (node!=null) {
System.out.println(node.val);
node=node.next;
}
}
}