两个递增链表合并

两个递增链表合并

package mypack7;

public class test7 {
    //输入两个单调递增的链表,输出两个链表合成之后的链表,
    // 当然,我们合成的链表需要单调不递减
    //假设我们有两个链表:A,B
    /*
    * A的头结点A1的值和    B的头结点b1的值  假设A1<B1    A1为为头结点
    * A2和B1比较,假设B1小,A1指向B1
    * A2再和B2比较,这样循环往复就行了*/
    //总结小的留下,大的再比较
    /*使用递归的方法*/
    /*如果没有排序的话肯定不能这样排*/
    public listNode Merge(listNode list1,listNode list2){
        //首先传入两个链表
        //当下面判断完了,要回来执行这个
        if(list1==null){
            return list2;
        }
        if (list2==null){
            return list1;
        }



        //链表1  链表2的值比较
        if(list1.val<list2.val){
            //他是怎么将这些元素合并的  他并未将这些元素合并,而是改变指针指向实现的

            //list1的值比较小的话,就把list1的val放在前面
            list1.next=Merge(list1.next,list2);

            return list1;
        }else {
            list2.next=Merge(list1,list2.next);
            return list2;
        }

        //list2是怎么加在后面的
    }

//list1.val<list2.val让list1前进
 //   list2.val<list1.val  让list2前进

    public static void main(String[] args) {
        listNode l1=new listNode(1);
        listNode l2=new listNode(2);
        listNode l3=new listNode(3);
        listNode l4=new listNode(4);
        listNode l5=new listNode(5);
        l1.next=l2;
        l2.next=l3;
        l3.next=l4;
        l4.next=l5;
        listNode a=new listNode(8);
        listNode b=new listNode(9);
        listNode c=new listNode(10);
        listNode d=new listNode(11);
        listNode e=new listNode(12);

        a.next=b;
        b.next=c;
        c.next=d;
        d.next=e;
        test7 test7=new test7();
        listNode merge = test7.Merge(l1, a);
        while (merge!=null){
            System.out.println(merge.val);
            merge=merge.next;
        }
    }
}

总结:list1.val<list2.val让list1前进比较 list2.val<list1.val 让list2前进比较,仅仅改变了指向。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值