链表合并

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

解题思路
    利用递归的思想,比较当前节点值的大小,然后使用递归。合并过程中,每次都是从两个链表中找出较小的一个来连接,因此可以采用递归来实现:当任意一个链表为null时,直接连接接另一个链表即可;其余情况只需要在两个链表中找出较小的一个结点进行连接接,该结点的next值继续通过递归函数来连接


/**
 * 链表合并
 */
public class MergeList {
    private static class ListNode{
        int val;
        ListNode next=null;

        public ListNode(int val) {
            this.val = val;
        }
    }
    /**
     *
     * @param list1
     * @param list2
     * @return
     *  将两个链表的合并
     */
    public static ListNode Merge(ListNode list1,ListNode list2) {
        //鲁棒性考虑
        if (list1==null){
            return list2;
        }else if (list2==null){
            return list1;
        }
        ListNode head=null;
        //常规解法
        if (list1.val<list2.val){
          head=list1;
          head.next=Merge(list1.next,list2);
        }else {
            head=list2;
            head.next=Merge(list1,list2.next);
        }
        return head;
    }

    public static void main(String[] args) {
        ListNode list1=new ListNode(1);
        list1.next=new ListNode(3);
        list1.next.next=new ListNode(5);

        ListNode list2=new ListNode(2);
        list1.next=new ListNode(4);
        list1.next.next=new ListNode(6);
        ListNode listNode=Merge(list1,list2);

        while (listNode!=null){
            System.out.print(listNode.val);
            listNode=listNode.next;

        }
    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一副金絲鏡 溫文爾文雅 臉上總是洋溢著燦爛的笑 好像全世界的人都應該認識我一樣 轉過街角 圍巾纏繞遮住耳角 緊身衣...
    望舍阅读 150评论 2 4
  • 上午去医院检查。 化验单出来了。 正好自己带了之前的化验单 对比之后发现️好几项都比以前高了 我有一项超出标准范围...
    31马赫阅读 115评论 0 0
  • 一些日子刮风 一些日子下雨 一些日子炎热 一些日子寒冷 一些日子漫长 一些日子刹那 一些日子 撕裂另一些日子 一些...
    Love_999阅读 281评论 5 2
  • 世上没有绝望的处境,只有对处境绝望的人。
    洋氵羊阅读 175评论 0 0
  • 有些人总是用类似这样的话鼓励自己和他人:只要你坚持,就一定能够成功。或者如图,你一定会红。但是,我这个人比较自卑,...
    左又缝圆阅读 339评论 0 0