两路归并排序(升序排列) (平均/最差)时间复杂度O(NlogN)
将两个有序的单链表合并为一个有序的单链表,默认是按升序排列的。
合并操作是非常适合用递归来完成的一类操作,递归实现将会比迭代实现更加清晰且易于理解。
尽管如此,你可能也不愿意使用递归来实现这个操作,因为递归方法所使用的栈空间与链表的长度成正比。
部分关键代码如下:
typedef struct _Node_t
{struct _Node_t *next;int data;
}Node;Node *Merge(Node *head1, Node *head2)//时间复杂度:O(nlogn)
{Node *head = NULL;if (NULL == head1){return head2;}if (NULL == head2){return head1;}while ((NULL != head1) && (NULL != head2)){if (head1->data < head2->data){head = head1;head->next = Merge(head1->next, head2);}else{head = head2;head->next = Merge(head1, head2->next); }}return head;
}