### 这道题可以用递归很方便的解决,但是可能会暴栈,所以此次用迭代写。思路就根据代码慢慢体会吧,这道题最好是画两个链表,跟着图走一遍就了解了。 ``` 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; } ```