题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
题目分析
- 使用递归的思想:将两个链表的节点按大小循环插入。
- 使用选择排序的思想:因为两个链表都是有序的,每次取第二个链表的第一个节点(这样每次第二个链表的第一个节点都是第二个链表中最小的),将这个节点插入到到第一个链表中,如果某次插入的位置是第一个链表的末尾,则直接将第一个链表和第二个链表剩余的部分相连。要注意的是第一次比较时要单独比较,因为第一个链表的头节点可能会改变,之后每次比较都从第一次插入的节点开始,因为第二个链表的剩余部分的值都大于该节点的值。
Java实现
- 递归
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
if(list1.val <= list2.val){
list1.next = Merge(list1.next,list2);
return list1;
}else{
list2.next = Merge(list1,list2.next);
return list2;
}
}
- 使用选择排序思想
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode current1 = list1;