链表的结点结构
struct Node
{
Node(int value)
:_value(value)
, _next(NULL)
{}
int _value;
Node* _next;
};
问题描述:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然按照递增排序的。
解决问题:
方法一 递归版本
Node* Merge(Node *pHead1, Node* pHead2)
{
if (pHead1 == NULL)
return pHead2;
if (pHead2 == NULL)
return pHead2;
Node *pNewHead = NULL;
if (pHead1->_value <= pHead2->_value)
{
pNewHead = pHead1;
pNewHead->_next = Merge(pHead1->_next, pHead2);
}
else
{
pNewHead = pHead2;
pNewHead->_next = Merge(pHead1, pHead2->_next);
}
return pNewHead;
}
方法二、非递归版本
修改结点next域的指向
Node* Merge1(Node *pHead1,Node* pHead2)
{
Node *p1 = pHead1;
Node *p2 = pHead2;
if (p1 == NULL)
return p2;
if (p2 == NULL)
return p1;
Node *pNewHead = NULL;
Node *pTailNode = NULL;
if (p1->_value <= p2->_value)
{
pNewHead = p1;
pTailNode = p1;
p1 = p1->_next;
}
else
{
pNewHead = p2;
pTailNode = p2;
p2 = p2->_next;
}
//修改指针的指向
while (p1 != NULL && p2 != NULL)
{
if (p1->_value <= p2->_value)
{
pTailNode->_next = p1;
pTailNode = p1;
p1 = p1->_next;
}
else
{
pTailNode->_next = p2;
pTailNode = p2;
p2 = p2->_next;
}
}
if (p1 == NULL)
pTailNode->_next = p2;
else
pTailNode->_next = p1;
return pNewHead;
}

本文介绍了一种合并两个递增排序链表的方法,并确保合并后的链表依然保持递增排序。提供了两种实现方式:递归版本和非递归版本。递归版本通过条件判断递归调用自身完成合并;非递归版本则通过遍历两个链表,比较节点值大小,调整指针指向来完成合并。
330

被折叠的 条评论
为什么被折叠?



