设为首页 加入收藏

TOP

合并有序链表
2014-11-24 07:27:14 】 浏览:2843
Tags:合并 有序
合并两个升序链表,要点在于:边界条件判断,即链表可能为空。
剩下的
/*
1: 边界条件判断
2: 头结点的值
3:
*/
Node * mergeOrderedLinkedList(Node *head1, Node *head2)
{
//边界条件判断
if(null == head1) return head2;
if(null == head2) return head1;
Node *head = null, *p1 = null, *p2 = null;
//获取头结点
if(head1->value < head2->value)
{
head = head1;
p1 = head1->next;
p2 = head2;
}
else
{
head = head2;
p2 = head2->next;
p1 = head1;
}
//依次合并
Node *p3 = head;
while(null != p1 && null != p2)
{
if(p1->value < p2->value)
{
p3->next = p1;
p3 = p1;
p1 = p1->next;
}
else
{
p3->next = p2;
p3 = p2;
p2 = p2->next;
}
}
if(null == p1)
{
p3->next = p2;
}
else{
p3->next = p1;
}
return head;
}
(2)递归实现。
按照上面的算法实现,思路很清晰简单,但是代码太长。可以知道每次循环的动作都是相似的,用递归应该可以实现。如下
[cpp]
Node * mergeOrderedLinkedListRecursive(Node *head1, Node *head2)
{
//边界条件判断
if(null == head1) return head2;
if(null == head2) return head1;
Node *head = null; www.2cto.com
if(head1->value < head2->value)
{
head = head1;
head->next = mergeOrderedLinkedListRecursive(head1->next, head2);
}
else
{
head = head2;
head->next = mergeOrderedLinkedListRecursive(head1, head2->next);
}
return head;
}
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇HEVC帧间预测之一――TComDataCU:.. 下一篇PAT1046-Shortest Distance

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目