实现两个链表LA,LB的有序合并保持有序,保存在LA中用c或c++
时间: 2024-10-02 14:03:12 浏览: 29
C++版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现
在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;
}
```
这个函数首先检查两个头结点的值,将较小的节点设置为结果链表的新头结点,并移动相应的指针。然后,它会一直比较并链接这两个链表,直到其中一个链表遍历完为止。
阅读全文