题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。
思路:分别遍历两个链表,每一个都比较两个链表的头结点,把小的那一个头结点放到一个新定义的链表中,因为每一个比较合并的过程都是一模一样的,所以可以使用递归来实现。这里要注意输入的链表为空的特殊情况。
测试用例:
1. 功能测试:输入的两个链表有多个节点;节点的值互不相同或者存在值相等的多个节点。
2. 特殊测试:两个链表中只有一个节点。
3. 负面测试:两个链表的其中一个头结点为空或者两个头结点都为空。
public class test_twenty_five {
public ListNode Merge(ListNode list1, ListNode list2){
//如果链表一为空就返回链表二,如果链表二为空就返回链表一,如果都为空就随便返回一个,反正都是空
if(list1 == null)return list2;
if(list2 == null)return list1;
ListNode list0 = null; //定义list0来保存节点
//每一次都比较两个链表的头结点,把小的那个放到list0中,然后递归进行下一次的比较
if(list1.val < list2.val){
list0 = list1;
list0.next = Merge(list1.next,list2);
}
else{
list0 = list2;
list0.next = Merge(list1,list2.next);
}
return list0;
}