1、题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
2、思路
从两个链表的头结点开始,链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点是合并后链表的头结点,我们继续合并两个链表中剩余的节点,在两个链表中剩下的节点依然是排序的,因此合并这两个链表的步骤和前面的步骤是一样的,我们还是比较两个头结点的值,将较小的节点连接到合并后链表的后面。这就是典型的递归过程。
注意,如果第一个链表是空链表,则结果就是第二个链表;如果第二个链表是空链表,则结果是第一个链表;如果两个链表都是空链表,则合并后的结果就是空链表。
3、代码实现
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;
}
}
}