题目描述
输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序。
样例
Input: 1->3->5 , 2->4->5
Output: 1->2->3->4->5->5
解题思路
-
普通思路
-
描述
就是归并排序的一次简单实现。
-
实现代码:
/* struct ListNode { int val; struct ListNode* next; ListNode(int val) { this->val = val; this->next = NULL; } }; */ ListNode* merge(ListNode* l1, ListNode* l2) { ListNode* dummy = new ListNode(-1); ListNode* p = dummy,*tmp; while(l1 && l2) { if(l1->val < l2->val) { tmp = l1->next; l1->next = p->next; p->next = l1; p = p->next; l1 = tmp; } else { tmp = l2->next; l2->next = p->next; p->next = l2; p = p->next; l2 = tmp; } } while(l1) { tmp = l1->next; l1->next = p->next; p->next = l1; p = p->next; l1 = tmp; } while(l2) { tmp = l2->next; l2->next = p->next; p->next = l2; p = p->next; l2 = tmp; } return dummy->next; }
-
复杂度分析
时间复杂度: O ( n ) O( n) O(n)
空间复杂度: ≈ O ( 1 ) \approx O( 1) ≈O(1)
-