题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。
#include<iostream>
#include"List.h"
using namespace std;
//struct ListNode {
// int m_nValue;
// ListNode* m_pNext;
//};
ListNode* MergeTwoLists(ListNode* pHead1, ListNode* pHead2) {
if (pHead1 == nullptr)return pHead2;
if (pHead2 == nullptr)return pHead1;
//1.确定头节点
ListNode* pMergeHead = nullptr;
ListNode* p1 = nullptr;
ListNode* p2 = nullptr;
if (pHead1->m_nValue <= pHead2->m_nValue) {
pMergeHead = pHead1;
p1 = pHead1->m_pNext;
p2 = pHead2;
}
else {
pMergeHead = pHead2;
p1 = pHead1;
p2 = pHead2->m_pNext;
}
//2.在两条链表中选择较小值接到指针p之后
ListNode* p = pMergeHead;
while (p1 != nullptr && p2 != nullptr) {
if (p1->m_nValue < p2->m_nValue) {
p->m_pNext = p1;
p = p->m_pNext;
p1 = p1->m_pNext;
}
else {
p->m_pNext = p2;
p = p->m_pNext;
p2 = p2->m_pNext;
}
}
if (p1 != nullptr) {
p->m_pNext = p1;
}
if (p2 != nullptr) {
p->m_pNext = p2;
}
return pMergeHead;
}
int main() {
ListNode* pNode1 = CreateListNode(1);
ListNode* pNode2 = CreateListNode(2);
ListNode* pNode3 = CreateListNode(3);
ListNode* pNode4 = CreateListNode(4);
ListNode* pNode5 = CreateListNode(2);
ListNode* pNode6 = CreateListNode(4);
ListNode* pNode7 = CreateListNode(7);
ListNode* pNode8 = CreateListNode(8);
/*ConnectListNodes(pNode1, pNode3);
ConnectListNodes(pNode3, pNode5);
ConnectListNodes(pNode5, pNode7);
ConnectListNodes(pNode2, pNode4);
ConnectListNodes(pNode4, pNode6);
ConnectListNodes(pNode6, pNode8);*/
ListNode* tes = MergeTwoLists(pNode1, pNode5);
PrintList(tes);
return 0;
}