剑指offer面试题25:合并两个排序的链表(Java 实现)

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。

思路:分别遍历两个链表,每一个都比较两个链表的头结点,把小的那一个头结点放到一个新定义的链表中,因为每一个比较合并的过程都是一模一样的,所以可以使用递归来实现。这里要注意输入的链表为空的特殊情况。

测试用例:
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;
    }

 

你可能感兴趣的:(剑指offer)