题目:
输入两个递增排序的链表,合并这两个链表并使链表中的结点仍然是按照递增排序的。
思路:
假若有list1:{1,3,5}
list2:{2,4,6}
1)先比较1和2,明显是1小。所以list1的1结点为合并链表的头结点。合并链表为{1}
2)接下来比较list1:{3,5} 和 list2:{2,4,6}链表,明显2比3小,将2加入到合并的链表,所以合并后的链表为{1,2}。
3)重复类似2)的步骤,即每次从两个链表中选出val较小的结点,并拼接到合并链表。
此处使用递归代码更加精简
- 注:考虑链表为空的特殊情况!
实现:
/*
public 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 pMergeHead = null;
if (list1.val <= list2.val) {
pMergeHead = list1;
pMergeHead.next = Merge(list1.next, list2);
} else {
pMergeHead = list2;
pMergeHead.next = Merge(list1, list2.next);
}
return pMergeHead;
}
}