天天看點

【LeetCode】21. 合并兩個有序連結清單—力扣

21. 合并兩個有序連結清單 - 力扣(Leetcode)

将兩個升序連結清單合并為一個新的 升序 連結清單并傳回。新連結清單是通過拼接給定的兩個連結清單的所有節點組成的。 

【LeetCode】21. 合并兩個有序連結清單—力扣

【LeetCode】21. 合并兩個有序連結清單—力扣
 題解: 

        定義傳回的頭,和便于新連結清單插入的尾巴。

        1、先判定是否存在空,傳回不空連結清單。

        2、雙指針周遊。

        3、将已經為空的連結清單接到尾巴上。

代碼:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
    if(list1==NULL)
        return list2;
    if(list2==NULL)
        return list1;
    struct ListNode* head,*tail = NULL;
    head = tail = NULL;
    while(list1&&list2)
    {
        if(list1->val<=list2->val)
        {
            if(tail == NULL)
            {
                head = tail = list1;
            }
            else
            {
                tail->next = list1;
                tail = tail->next;
            }
            list1 = list1->next;
        }
        else
        {
            
            if(tail == NULL)
            {
                head = tail = list2;
            }
            else
            {
                tail->next = list2;
                tail = tail->next;
            }
            list2 = list2->next;
        }

    }
    if(list1)
        tail->next = list1;
    if(list2)
        tail->next = list2;
    return head;
}