1、题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
2、思路
运用递归;
如果第一个链表为空,则直接返回第二个链表;
如果第二个链表为空,则直接返回第一个链表;
如果第一个链表中的值小于第二个链表中的值,则将一个链表中的相应元素插入链表;
如果第一个链表中的值大于第二个链表中的值,则将二个链表中的相应元素插入链表;
代码如下:
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null){//如果第一个链表为空,则直接返回第二个链表
return list2;
}else if(list2 == null){//如果第二个链表为空,则直接返回第一个链表
return list1;
}
ListNode mergedHead = null;
if(list1.val < list2.val){//如果第一个链表中的值小于第二个链表中的值,则将一个链表中的相应元素插入
//链表
mergedHead = list1;
mergedHead.next = Merge(list1.next,list2);
}else{//如果第一个链表中的值大于第二个链表中的值,则将二个链表中的相应元素插入
//链表
mergedHead = list2;
mergedHead.next = Merge(list1,list2.next);
}
return mergedHead;
}
public static void main(String args[]){
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
node1.next = node2;
node2.next = node3;
ListNode node11 = new ListNode(1);
ListNode node22 = new ListNode(2);
ListNode node33 = new ListNode(3);
node11.next = node22;
node22.next = node33;
Solution s = new Solution();
ListNode node = s.Merge(node1,node11);
while(node != null){
System.out.println(node.val);
node = node.next;
}
}
}