c_cpp 合并两个排序列表,递归和迭代
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 合并两个排序列表,递归和迭代相关的知识,希望对你有一定的参考价值。
ListNode* merge_two_sorted_lists_recursive(ListNode *L1, ListNode *L2) {
if(!L1) return L2;
if(!L2) return L1;
ListNode *head = NULL;
if(L1->val < L2->val) {
head = L1;
head->next = merge_two_sorted_lists_recursive(L1->next, L2);
}
else {
head = L2;
head->next = merge_two_sorted_lists_recursive(L1, L2->next);
}
return head;
}
ListNode* merge_two_sorted_lists_iterative(ListNode *L1, ListNode *L2) {
if(!L1) return L2;
if(!L2) return L1;
ListNode *p1 = L1, *p2 = L2;
ListNode *head = NULL;
if(p1->val < p2->val) {
head = p1;
p1 = p1->next;
} else {
head = p2;
p2 = p2->next;
}
ListNode *tail = head;
while(p1 && p2) {
if(p1->val < p2->val) {
tail->next = p1;
p1 = p1->next;
} else {
tail->next = p2;
p2 = p2->next;
}
tail = tail->next;
}
/* wrong
if(p1) tail->next = p1;
if(p2) tail->next = p2;
tail->next = NULL; */
if(p1) tail->next = p1;
else tail->next = p2;
return head;
}
以上是关于c_cpp 合并两个排序列表,递归和迭代的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 合并两个已排序的链接列表,使合并列表的顺序相反
c_cpp 21.合并两个排序列表
c_cpp 合并两个已排序的链接列表
c_cpp 21.合并两个排序列表 - 难度容易 - 2018.8.10
c_cpp 查找链接列表的长度(迭代和递归)
c_cpp 搜索链接列表中的元素(迭代和递归)