leetcode 21. 合併兩個有序連結串列 C語言版
阿新 • • 發佈:2018-11-23
將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4 輸出:1->1->2->3->4->4
可以通過一次遍歷同時掃描兩個連結串列,時間複雜度為O(m + n):
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) { struct ListNode* a = (struct ListNode*)malloc(sizeof(struct ListNode)); struct ListNode* p,* q,* w; a -> next = NULL; p = a; q = l1; w = l2; while(q != NULL&&w != NULL) { if(q->val < w->val) { p->next = q; q = q->next; p = p->next; p->next = NULL; } else { p->next = w; w = w->next; p = p->next; p->next = NULL; } } while(q != NULL) { p->next = q; q = q->next; p = p->next; p->next = NULL; } while(w != NULL) { p->next = w; w = w->next; p = p->next; p->next = NULL; } p = a->next; free(a); return p; }