Merge Two Sorted Lists, 合併兩個有序鏈表

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        //考慮空指針問題
        //採用非遞歸寫法
        if (!l1)
            return l2;
        if (!l2)
            return l1;
        ListNode *p, *q, *r, *pHead;
        p = l1;
        q = l2;
        if (p->val <= q->val)
        {
            pHead = p;
            p = p->next;
        }
        else
        {
            pHead = q;
            q = q->next;
        }
        r = pHead;
        while (1)
        {
            if (!p)
            {
                r->next = q;
                break;
            }
            if (!q)
            {
                r->next = p;
                break;
            }
            if (p->val <= q->val)
            {
                r->next = p;
                r = p;
                p = p->next;
            }
            else
            {
                r->next = q;
                r = q;
                q = q->next;
            }
        }
        return pHead;
    }
};

同樣,也可以採用遞歸寫法,見《劍指offer》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章