天天AC系列(七):合併兩個有序鏈表

1 題目

LeetCode第21題,合併兩個有序鏈表. 在這裏插入圖片描述java

2 直接合並

由於已經有序了,相似歸併排序中的合併同樣,操做不難,直接上代碼了.git

ListNode t = new ListNode(0);
ListNode head = t;
while(l1 != null && l2 != null)    
{
    if(l1.val < l2.val)
    {
        t.next = l1;
        l1 = l1.next;
    }
    else
    {
        t.next = l2;
        l2 = l2.next;
    }
    t = t.next;
}
while(l1 != null)
{
    t.next = l1;
    l1 = l1.next;
    t = t.next;
}
while(l2 != null)
{
    t.next = l2;
    l2 = l2.next;
    t = t.next;
}
return head.next;

在這裏插入圖片描述

3 遞歸合併

這個能夠採用遞歸優化,並且不用額外設置一個移動的臨時結點t.首先對兩個指針進行判空操做,其中一個爲空的話返回另外一個,而後進行遞歸合併,首先建立一個head結點,進行賦值後遞歸合併next結點,將返回值賦給head.next,最後返回head.github

if(l1 == null) return l2;
if(l2 == null) return l1;

ListNode head = null;
if(l1.val < l2.val)
{
    head = l1;
    head.next = mergeTwoLists(l1.next, l2);
}
else
{
    head = l2;
    head.next = mergeTwoLists(l1, l2.next);
}
return head;

4 源碼

github優化

碼雲指針

相關文章
相關標籤/搜索