### 这道题可以用递归很方便的解决,但是可能会暴栈,所以此次用迭代写。思路就根据代码慢慢体会吧,这道题最好是画两个链表,跟着图走一遍就了解了。
```
SList* merge(SList *pHead1, SList *pHead2)
{
// 两个 if 为边界条件,之后的处理都建立在两个链表都不为空的情况下
if (pHead1 == nullptr) {
return nullptr;
}
if (pHead2 == nullptr) {
return nullptr;
}
SList *newHead = nullptr; // 新的链表头
SList *pList1 = pHead1, *pList2 = pHead2;
if (pList1->m_data <= pList2->m_data) {
newHead = pList1;
pList1 = pList1->m_next;
} else {
newHead = pList2;
pList2 = pList2->m_next;
}
SList *pNewListTail = newHead; // 保存新链表的尾部
while (pList1 != nullptr && pList2 != nullptr) {
if (pList1->m_data <= pList2->m_data) {
pNewListTail->m_next = pList1;
pNewListTail = pNewListTail->m_next;
pList1 = pList1->m_next;
} else {
pNewListTail->m_next = pList2;
pNewListTail = pNewListTail->m_next;
pList2 = pList2->m_next;
}
}
// 如果某个链表还有剩余节点,直接用pNewListTail连过去就好了
if (pList1 != nullptr) {
pNewListTail->m_next = pList1;
}
if (pList2 != nullptr) {
pNewListTail->m_next = pList2;
}
// 返回新链头
return newHead;
}
```