题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
我的思路:
创建一个新的链表头结点,该结点不断地指向两个有序链表的头部较小的元素,每指向一次则被指向的链表后移一位。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
//有一个链表为空,输出另一个链表
if (pHead1 == NULL)
return pHead2;
if (pHead2 == NULL)
return pHead1;
//把两个链表头部较小的结点的值加到第三个链表的尾部,该结点后移
ListNode* p1 = pHead1;
ListNode* p2 = pHead2;
ListNode* pHead3 = new ListNode(0);
ListNode* p3 = pHead3;
while (p1 && p2)
{
if (p1->val >= p2->val)
{
ListNode* temp = p2;
p2 = p2->next;
p3 ->next= temp;
p3 = p3->next;
}
else
{
ListNode* temp = p1;
p1 = p1->next;
p3->next = temp;
p3 = p3->next;
}
}
//
if (p1)
{
p3 ->next= p1;
}
else
{
p3->next = p2;
}
ListNode* temp = pHead3;
pHead3 = pHead3->next;
delete temp;
return pHead3;
}
};
时间复杂度:o(n+m)
空间复杂度:0(max(m,n))
执行完操作后pHead1和pHead2也成为了和pHead3差不多的链表。