编写合并函数,将两个有序的单链表合并成一个有序单链表
时间: 2023-06-05 13:47:22 浏览: 183
可以使用递归的方法来实现合并两个有序的单链表。
具体步骤如下:
1. 如果其中一个链表为空,则直接返回另一个链表。
2. 比较两个链表的头节点,将较小的节点作为合并后链表的头节点。
3. 递归调用合并函数,将剩余的节点继续合并。
4. 返回合并后的链表。
代码如下:
```
struct ListNode* merge(struct ListNode* l1, struct ListNode* l2) {
if (l1 == NULL) return l2;
if (l2 == NULL) return l1;
if (l1->val < l2->val) {
l1->next = merge(l1->next, l2);
return l1;
} else {
l2->next = merge(l1, l2->next);
return l2;
}
}
```
其中,l1和l2分别表示两个有序的单链表的头节点,返回合并后的有序单链表的头节点。
相关问题
编写合并函数将两个单链表合成一个单链表
好的,让我来帮您解答第一个问题。以下是合并两个单链表的示例代码:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode:
dummy = ListNode(0)
cur = dummy
while l1 and l2:
if l1.val < l2.val:
cur.next = l1
l1 = l1.next
else:
cur.next = l2
l2 = l2.next
cur = cur.next
cur.next = l1 if l1 else l2
return dummy.next
```
这段代码定义了一个`ListNode`类和一个合并函数`mergeTwoLists`,其中输入参数为两个链表`l1`和`l2`,输出为合并后的链表。我们创建一个哑节点`dummy`,并使用一个`cur`指针遍历两个输入链表。通过比较当前指针所指节点的值,将较小的节点加入到新链表中,并将指针向后移动。最后将剩余链表的节点连接到新链表的尾部即可。
希望我的回答能够帮助到您!
用c语言编写合并函数,将两个有序的单链表合并成一个有序的单链表
好的,我可以回答这个问题。合并两个有序的单链表需要先比较两个链表的当前节点值大小,然后将较小值的节点放入新的链表中。接着继续比较两个链表的下一节点值大小,重复上述步骤直到其中一个链表已经被遍历完毕,将另一个链表的剩余节点插入新的链表中即可。以下是合并函数的样例代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
// 创建新链表头
struct ListNode* head = malloc(sizeof(struct ListNode));
head->val = 0;
head->next = NULL;
// 创建指向新链表节点的指针
struct ListNode* cur = head;
// 比较两个链表的当前节点值大小,并插入新链表中
while (l1 && l2) {
if (l1->val < l2->val) {
cur->next = l1;
l1 = l1->next;
} else {
cur->next = l2;
l2 = l2->next;
}
cur = cur->next;
}
// 将未遍历完的链表节点插入新链表尾部
cur->next = l1 ? l1 : l2;
// 返回新链表头
return head->next;
}
```