怎么合并两个有序链表
时间: 2024-01-24 14:12:58 浏览: 81
要合并两个有序链表,可以使用递归或迭代的方法。以下是迭代的方法:
假设有两个有序链表l1和l2,我们可以创建一个新的链表result,然后比较l1和l2的头节点,将较小的节点加入result中,直到其中一个链表为空。最后,将另一个非空链表的剩余部分加入result中。
以下是C++代码实现:
```c++
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* result = new ListNode(0);
ListNode* cur = result;
while (l1 != nullptr && l2 != nullptr) {
if (l1->val < l2->val) {
cur->next = l1;
l1 = l1->next;
} else {
cur->next = l2;
l2 = l2->next;
}
cur = cur->next;
}
if (l1 != nullptr) {
cur->next = l1;
} else {
cur->next = l2;
}
return result->next;
}
```
相关问题
c语言写:合并两个有序链表,编写一个函数,接受两个有序链表的头节点,将这两个链表合并为一个有序链表,并返回合并后的链表头节点
在C语言中,合并两个有序链表可以采用迭代或递归的方式实现。这里我们提供一个简单的迭代方法:
```c
// 定义链表节点结构体
typedef struct ListNode {
int val; // 节点值
struct ListNode *next; // 指向下一个节点的指针
} ListNode;
// 合并两个有序链表的函数
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 如果l1为空,则直接返回l2
if (l1 == NULL) return l2;
// 如果l2为空,则直接返回l1
if (l2 == NULL) return l1;
// 创建一个新的链表头节点,初始化为第一个非空链表的头部
ListNode* head = l1 > l2 ? l1 : l2;
ListNode* current = head;
// 依次比较两个链表的节点,选择较小的一个添加到结果链表中
while (l1 != NULL && l2 != NULL) {
if (l1->val < l2->val) {
current->next = l1;
l1 = l1->next;
} else {
current->next = l2;
l2 = l2->next;
}
current = current->next;
}
// 将剩余的链表节点添加到结果链表的尾部
if (l1 != NULL) current->next = l1;
else current->next = l2;
// 返回合并后的链表头节点
return head;
}
```
合并两个有序链表c++
可以使用递归的方法来合并两个有序链表,具体实现如下:
```c++
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (!l1) return l2;
if (!l2) return l1;
if (l1->val < l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
} else {
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}
};
```
在这个实现中,我们首先判断两个链表是否为空。如果其中一个链表为空,直接返回另一个链表即可。如果两个链表都不为空,我们比较两个链表头节点的值,将小的链表接到递归结果的后面,最后返回合并后的链表头节点。
阅读全文