LeetCode 第 21 題 (Merge Two Sorted Lists)

liyuanbhu發表於2016-05-01

LeetCode 第 21 題 (Merge Two Sorted Lists)

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

合併兩個排好序的連結串列,要求合併之後的連結串列仍然是排好序的。題目的要求給的並不明確,沒有說合並之後的連結串列需要排好序的。但是出題人的意圖確實是這樣的。

這個題目比較簡單,技巧呢仍然是提前建立一個頭節點。這樣能簡化程式碼。
程式裡同時維護著三個指標, l1、l2、和 p。l1、l2 用來遍歷輸入的兩個連結串列。並依次將較小的元素插入到 p 這個連結串列中。具體的程式碼如下。

ListNode* mergeTwoLists(ListNode* l1, ListNode* l2)
{
    ListNode head(0), *p = &head;
    while(l1 && l2)
    {
        if(l1->val <= l2->val)
        {
            p->next = l1;
            l1 = l1->next;
        }
        else
        {
            p->next = l2;
            l2 = l2->next;
        }
        p = p->next;
    }
    if(l1 == NULL) p->next = l2;
    if(l2 == NULL) p->next = l1;
    return head.next;
}

相關文章