题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
如,
链表1:
链表2:
链表3:合并后
链表2:
实现
递归:
- 链表1、2头节点较小的为3的头节点
- 剩余节点的头节点作为新的头节点递归
/**25 合并两个排序的链表*/
public class C25_list_Merge {
public static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
static ListNode merge(ListNode head1, ListNode head2){
if(head1==null) return head2;
if(head2==null) return head1;
ListNode mergeNode = null;
if(head1.val<head2.val){ //链1的较小,为head
mergeNode=head1; //比较链1的下一节点和链2head
mergeNode.next=merge(head1.next,head2);
}else { //链2的较小,为head
mergeNode=head2; //比较链2的下一节点和链1head
mergeNode.next=merge(head1,head2.next);
}
return mergeNode;
}
}
Test
public static void main(String[] args) {
ListNode node11 = new ListNode(1);
ListNode node12 = new ListNode(3);
ListNode node13 = new ListNode(5);
ListNode node14 = new ListNode(7);
node11.next = node12;
node12.next = node13;
node13.next = node14;
ListNode node21 = new ListNode(2);
ListNode node22 = new ListNode(4);
ListNode node23 = new ListNode(6);
ListNode node24 = new ListNode(8);
node21.next = node22;
node22.next = node23;
node23.next = node24;
ListNode head = merge(node11,node21);
while (head.next!=null){
System.out.println(head.val);
head=head.next;
}
System.out.println(head.val);
}