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

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

思路:这就是一个二路归并的实现。

不过就是初始数据是存储在链表当中的。

部分代码:

/*
public class ListNode {
    int val;
    ListNode next = null;


    ListNode(int val) {
        this.val = val;
    }
}*/
import java.util.ArrayList;
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
        if(list1==null&&list2==null){//两个链表都是空的
            return null;
        }
        ArrayList<ListNode> list11 = new ArrayList<>();
        ArrayList<ListNode> list22 = new ArrayList<>();
        while(list1!=null){
            list11.add(list1);
            list1 = list1.next;
        }
        while(list2!=null){
            list22.add(list2);
            list2 = list2.next;
        }
        if(list11.size()==0){
            ListNode node1 = new ListNode(list22.get(0).val);
            ListNode node2 = node1;
            for(int i = 1;i<list22.size();i++){
                node1.next = new ListNode(list22.get(i).val);
                node1 = node1.next;
            }
            return node2;
        }
        if(list22.size()==0){
           ListNode node1 = new ListNode(list11.get(0).val);
            ListNode node2 = node1;
            for(int i = 1;i<list11.size();i++){
                node1.next = new ListNode(list11.get(i).val);
                node1 = node1.next;
            }
            return node2;
        }
        
        ListNode node = new ListNode(list11.get(0).val>list22.get(0).val?list22.get(0).val:list11.get(0).val);
        ListNode result = node;

//说明:此处用两个变量的原因,有人直接只定义一个变量,并且给变量初始化为null,但是注意当初始化为null的对象,内存并没有给它分配地址。

  //      一个变量node是中间变量,相当于是指针当前所指的,而result就是返回的了。在最开始的时候,赋值result = node,是让result指向node的最   //         开始的位置。
        int index1 = 0;
        int index2 = 0;
        if(list11.get(0).val>list22.get(0).val){
            index2 = 1;
        }else{
            index1 = 1;
        }
        for(int i = 0;i<(list11.size()+list22.size());i++){
            if(index1<list11.size()&&index2<list22.size()&&list11.get(index1).val>=list22.get(index2).val){
                node.next = new ListNode(list22.get(index2).val);
                node = node.next;
                index2++;
                if(index2==list22.size()){
                    break;
                }
            }else if(index1<list11.size()&&index2<list22.size()){
                node.next = new ListNode(list11.get(index1).val);
                node = node.next;
                index1++;
                if(index1==list11.size()){
                    break;
                }
            }else{
                break;
            }
        }
        if(index1<list11.size()){
            node.next = new ListNode(list11.get(index1).val);
            node = node.next;
            index1++;
        }else{
            node.next = new ListNode(list22.get(index2).val);
            node = node.next;
            index2++;
        }


        return result;
    }
}

speak to myself:在编代码之前,我已经看出关键了,但是编出来的代码还是有一点繁琐。而且稍微一点失误,就不行。之后看了大家的代码,醍醐灌顶。还是要看看其他人的代码,当然是自己做完之后了。看看自己有什么优点,又有什么不足。取长补短,我相信,随着时间的过去,会有所提高的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值