求教2个有序链表合并的时间空间复杂度。该如何解决
求教2个有序链表合并的时间空间复杂度。
求教大家一个问题,这个函数的时间复杂度和空间复杂度是多少啊,我觉得是O(n)或者O(m),取其中小的,但是同学说不对,说是O(m+n),求各位大神指点下,能说的详细点就更好了。
------解决方案--------------------
最好的情况是O(m、n中的最小值)
最坏的情况是O(m+n)
------解决方案--------------------
空间复杂度是O(1),这个应该没问题。
求教大家一个问题,这个函数的时间复杂度和空间复杂度是多少啊,我觉得是O(n)或者O(m),取其中小的,但是同学说不对,说是O(m+n),求各位大神指点下,能说的详细点就更好了。
/**
* @brief 合并两个有序链表
* @param[in] head1_ptr:第一个链表的首指针
* @param[in] head2_ptr:第二个链表的首指针
* @retval 反转后链表的首指针
* @see Node
* @note 当输入两个参数为同一个指针的时候,第一个节点指向自己构成循环链表
*/
Node_ptr ListMerge(Node_ptr head1_ptr, Node_ptr head2_ptr)
{
Node_ptr head1 = head1_ptr;
Node_ptr head2 = head2_ptr;
Node_ptr ptr,head;
if(head1->data < head2->data)
{
ptr = head1;
head1 = head1->next;
}
else
{
ptr = head2;
head2 = head2->next;
}
head = ptr;
while(NULL != head1 && NULL != head2)
{
if(head1->data < head2->data)
{
ptr->next = head1;
ptr = ptr->next;
head1 = head1->next;
}
else
{
ptr->next = head2;
ptr = ptr->next;
head2 = head2->next;
}
}
printf("he");
if(!head1)
{
ptr->next = head2;
}
else if(!head2)
{
ptr->next = head1;
}
return head;
}
------解决方案--------------------
最好的情况是O(m、n中的最小值)
最坏的情况是O(m+n)
------解决方案--------------------
空间复杂度是O(1),这个应该没问题。