合并两个有序的链表

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

思路来源于 归并排序 合并两有序的数组:

思路是 有两个指针分别指向待合并的链表的头结点,将两个指针数值较小的指针后移,直到有一个为空

具体实现代码

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
        ListNode head; //头结点
        ListNode listMerge ; //指向当前链表尾部

//先进行基本的判断
        if(list2==null&&list1==null){ 
            return null;
        }else if(list2 !=null &&list1==null){
            return list2;
        }else if(list2==null&&list1!=null){
            return list1;
        }else if( list1.val>list2.val){
           listMerge = new ListNode(list2.val);
            list2=list2.next;
        }else{
            listMerge = new ListNode(list1.val);
            list1 = list1.next;
        }
         head = listMerge; 
        while(list1!=null&&list2!=null){
            if(list1.val<list2.val){

//生成新节点并置于新链表的尾部
                listMerge.next = new ListNode(list1.val);
                listMerge = listMerge.next;
                list1 = list1.next;
            }else{
                listMerge.next = new ListNode(list2.val);
                listMerge = listMerge.next;
                list2 =list2.next;
            }
        }
        
        while(list2 != null){
            listMerge.next = new ListNode(list2.val);
            listMerge = listMerge.next;
            list2 = list2.next;
            
        }
        
        while(list1 != null){
            listMerge.next = new ListNode(list1.val);
            listMerge = listMerge.next;
            list1 = list1.next;
            
            
            
        }
        return head;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_32459653/article/details/81126026