目录
链表类
// 链表类:
struct ListNode{
int val;
ListNode *next;
ListNode (int x): val(x), next(NULL) {}
};
非递归法
// 合并两个有序链表:
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2)
{
if (l1 == NULL)
return l2;
if (l2 == NULL)
return l1;
ListNode *pre = new ListNode(0);
ListNode *head = pre;
while (l1 != NULL && l2 !=NULL)
{
if(l1->val > l2->val)
{
head->next = l2;
l2 = l2->next;
}
else
{
head->next = l1;
l1 = l1->next;
}
head = head->next;
}
if (l1 == NULL)
{
head->next = l2;
}
if (l2 == NULL)
{
head->next = l1;
}
return pre->next;
}
递归法
ListNode* mergeTwoLists(ListNode* p1, ListNode* p2)
{
if(p1 == NULL)
return p2;
else if(p2 == NULL)
return p1;
ListNode* pMergedHead = NULL;
if(p1->val < p2->val)
{
pMergedHead = p1;
pMergedHead->next = mergeTwoLists(p1->next, p2);
}
else
{
pMergedHead = p2;
pMergedHead->next = mergeTwoLists(p1, p2->next);
}
return pMergedHead;
}
主函数调用
int main()
{
ListNode n1(1), n2(3), n3(5), n4(7), n5(9);
n1.next = &n2;
n2.next = &n3;
n3.next = &n4;
n4.next = &n5;
ListNode m1(2), m2(4), m3(6), m4(8), m5(10);
m1.next = &m2;
m2.next = &m3;
m3.next = &m4;
m4.next = &m5;
ListNode *pMergedHead = new ListNode(0);
pMergedHead = mergeTwoLists(&n1, &m1)
while (pMergedHead != NULL)
{
cout << pMergedHead ->val << endl;
pMergedHead = pMergedHead ->next;
}
}