21 合并两个有序链表
原题链接:合并两个有序链表
个人解法
思路:
归并排序的归并阶段的思路,两个指针指向链表,建一个新的头结点,小的那一个连入链表。
时间复杂度: O ( n + m ) O(n + m) O(n+m)
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
ListNode *head = new ListNode();
ListNode *u = head;
ListNode *p = list1, *q = list2;
while(p && q) {
if(p->val < q->val) {
u->next = p;
p = p->next;
}else {
u->next = q;
q = q->next;
}
u = u->next;
}
if(p) u->next = p;
if(q) u->next = q;
return head->next;
}
};