目录

leetcode-hot-100-21合并两个有序链表

【leetcode hot 100 21】合并两个有序链表

解法一:新建一个链表存放有序的合并链表。当 list1list2 至少有一个非空时,返回非空的;否则找出两个链表的最小值作为新链表的头,然后依次比较两链表,每次都先插入小的值。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode new_list=null;
        if(list1 != null && list2 != null){
            if(list1.val<=list2.val){
                new_list=list1;
                list1=list1.next;
                new_list.next=null;
            }
            else{
                new_list=list2;
                list2=list2.next;
                new_list.next=null;
            }
        }
        else{
            return list1!=null?list1:list2;
        }
        ListNode curr=new_list;
        while(list1 != null && list2 != null){
            if(list1.val<=list2.val){
                ListNode temp = list1.next;
                curr.next=list1;
                list1.next=null;
                list1=temp;
            }
            else{
                ListNode temp = list2.next;
                curr.next=list2;
                list2.next=null;
                list2=temp;
            }
            curr=curr.next;
        }
        if(list1!=null){
            curr.next=list1;
        }
        if(list2!=null){
            curr.next=list2;
        }
        return new_list;
    }
}

注意:

  • 当list1和list2至少有一个非空时,返回非空的: list1!=null?list1:list2 ,若 list1list2 都为 nulllist1list2 都可以返回。