帮我写一个链表的合并代码
时间: 2024-10-17 22:03:35 浏览: 13
链表的合并通常是将两个已排序链表合并成一个新的已排序链表。这里我会给出一个基本的Python代码示例,这个例子假设我们有两个单向链表:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def merge_sorted_lists(l1, l2):
# 定义一个辅助节点作为合并后的链表起点
if not l1:
return l2
elif not l2:
return l1
else:
if l1.val < l2.val:
# 如果l1较小,将其连接到结果链表
result = l1
l1 = l1.next
else:
# 否则,将l2连接到结果链表
result = l2
l2 = l2.next
# 递归地合并剩余部分
result.next = merge_sorted_lists(l1, l2)
return result
```
这个函数会比较两个链表当前节点的值,选择较小的那个并将其添加到结果链表,然后继续对剩下的链表进行同样的操作,直到其中一个链表遍历完。
相关问题
给你一个链表类,要你手写合并两个有序链表的代码
好的,我可以回答这个问题。以下是合并两个有序链表的代码:
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
if (l1 == NULL) return l2;
if (l2 == NULL) return l1;
if (l1->val < l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
} else {
l2->next = mergeTwoLists(l1, l2->next);
return 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)
curr = dummy
while l1 and l2:
if l1.val < l2.val:
curr.next = l1
l1 = l1.next
else:
curr.next = l2
l2 = l2.next
curr = curr.next
if l1:
curr.next = l1
elif l2:
curr.next = l2
return dummy.next
```
该算法的时间复杂度为 O(m+n),其中 m 和 n 分别为两个链表的长度。
阅读全文