NC33* 合并有序链表
题意分析:
将两个有序的链表合并
题解一:
我们新建4个指针,dummy用于返回最后结果,p用于遍历链表1,q用于遍历链表2,r用于指示生成的新链表末端。
举个如下例子:
- 开始拿指针p与指针q比较,指针p所指元素比较小,那么将r->next = p,p = p->next,r = r->next,r->next = NULL。链表变化如下:
重复步骤1,拿指针p与指针q比较,指针q所指元素比较小,那么将r->next=q,q = q->next,r = r->next,r->next = NULL。链表变化如下
重复以上步骤,直到p为空或者q为空,把不为空的链表追加到指针r之后。
代码实现如下
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* dummy = new ListNode(-1);
ListNode* r = dummy;
while (l1&&l2){
//当l1和l2均不为空,合并
if (l1->val < l2->val) {
r->next = l1;
l1 = l1->next;
r = r->next;
r->next = NULL;
}
else {
r->next = l2;
l2 = l2->next;
r = r->next;
r->next = NULL;
}
}
//在合并结束后,吧没有合并的部分追加到r之后
if (l1)
r->next = l1;
if (l2)
r->next = l2;
return dummy->next;
} 时间复杂度:,m,分别为两个链表的长度
空间复杂度:。

京公网安备 11010502036488号