实现两个链表LA,LB的有序合并保持有序,保存在LA中用c或c++
时间: 2024-10-02 20:03:12 浏览: 26
在C或C++中,实现两个已排序链表LA和LB的有序合并可以采用迭代或递归的方式来完成。这里我会给出一个简单的迭代方法:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* mergeTwoSortedLists(ListNode* LA, ListNode* LB) {
if (LA == nullptr) return LB;
if (LB == nullptr) return LA;
ListNode* result = (LA->val <= LB->val) ? LA : LB;
LA = (LA->val <= LB->val) ? LA->next : LA;
LB = (LB->val <= LA->val) ? LB->next : LB;
while (LA != nullptr && LB != nullptr) {
if (LA->val <= LB->val) {
result->next = LA;
LA = LA->next;
} else {
result->next = LB;
LB = LB->next;
}
result = result->next;
}
// 如果还有剩余节点,直接连接
if (LA != nullptr) {
result->next = LA;
} else if (LB != nullptr) {
result->next = LB;
}
return result;
}
```
这个函数首先检查两个头结点的值,将较小的节点设置为结果链表的新头结点,并移动相应的指针。然后,它会一直比较并链接这两个链表,直到其中一个链表遍历完为止。
阅读全文