算法-合并有序链表

86 阅读1分钟

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例 1:

输入: l1 = [1,2,4], l2 = [1,3,4]
输出: [1,1,2,3,4,4]

示例 2:

输入: l1 = [], l2 = []
输出: []

示例 3:

输入: l1 = [], l2 = [0]
输出: [0]

提示:

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1 和 l2 均按 非递减顺序 排列
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode head = new ListNode(0,list1);
        ListNode p = head;
        while (null != p.next && null != list2){
            ListNode next1 = p.next;
            if(next1.val < list2.val){
                p = next1;
                continue;
            }
            else {
                ListNode tmp = list2.next;
                p.next = list2;
                list2.next = next1;
                list2 = tmp;
                continue;
            }
        }
        if(null != list2){
            p.next = list2;
        }
        return head.next;
    }
}

优化一下

ListNode head = new ListNode(0,list1);
ListNode p = head;
while (null != list2){
    while (null != p.next && p.next.val < list2.val){
        p = p.next;
    }
    ListNode tmp = list2.next;
    ListNode pt = p.next;
    p.next = list2;
    p.next.next = pt;
    list2 = tmp;
}
return head.next;