您的位置:首页 > 其它

合并两个有序的单链表

2017-08-22 23:29 381 查看
题目:合并两个递增的单链表,使合并后的新链表中的节点依然是按照递增排序的。链表结点定义如下:

struct ListNode
{
int val;
ListNode next;
};

分析:我们从链表头结点开始分析,如果链表1头结点的值小于链表2头结点的值,那么链表1的头结点就是合并后新链表的头结点。
    我们继续合并两个链表中剩余的结点,依旧是比较两个链表头结点的值,找出小的那个连接到合并后新链表的尾部。

    我们发现合并的步骤都是一样的,所以这是一个递归的过程。

注意:我们要注意链表为空时的处理方式,如果一个链表为空,那它和另一个链表合并之后的结果就是另外那个链表。如果两个链表都是空链表,那么合并后依旧是空链表。

过程用图表示:



最后附上代码:

ListNode* Merge(ListNode* pHead1, ListNode* pHead2){
if(pHead1 == NULL)
return pHead2;
if(pHead2 == NULL)
return pHead1;

ListNode* MergeNode = NULL;
if(pHead1->val < pHead2->val){
MergeNode = pHead1;
MergeNode->next = Merge(pHead1->next, pHead2);
}
else{
MergeNode = pHead2;
MergeNode->next = Merge(pHead1, pHead2->next);
}
return MergeNode;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: