剑指offer:合并两个排序的链表

来源:互联网 发布:数据可视化 编辑:程序博客网 时间:2024/06/05 15:28

题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

思路:假设 链表1:1->3->5->7

                     链表2:2->4->6->8

                     链表3:1->2->3->4->5->6->7->8

我们可以先比较两个链表的头结点,发现链表1的结点值1小于链表2的结点值2,那么合并后的结点头结点就是链表1的头结点1,接着比较链表1的第二个结点3和链表2的头结点2,发现2<3,那么就把链表2的头结点合并为1->2,依次递归实现后面的结点。

我们还有考虑到空链表的问题,如果链表1是空链表,那么返回的应该是链表2,;如果链表2是空链表,返回的是链表1,;如果两个链表都是空,则返回空。

代码如下:

public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
        if(list1==null)
            return list2;
        if(list2==null)
            return list1;
        if(list1==null&&list2==null)
            return null;
        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;
    }
}

原创粉丝点击