输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需 要合成后的链表满足单调不减规则
时间: 2023-07-11 21:31:52 浏览: 49
好的,这是一道经典的链表合并问题。可以采用递归或迭代的方式实现。
递归实现:
```python
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
if not l1:
return l2
elif not l2:
return l1
elif l1.val < l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
```
迭代实现:
```python
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
dummy = ListNode(-1) # 创建虚拟头节点
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` 表示链表节点,包含 `val` 和 `next` 两个属性。`l1` 和 `l2` 分别表示两个链表的头节点。递归实现中,如果 `l1` 或 `l2` 为空,则返回另一个链表。否则,比较两个链表的头节点值,将较小的头节点接到当前节点后面,并递归考虑剩余链表。迭代实现中,创建虚拟头节点,并用 `cur` 指针指向当前节点,比较两个链表的头节点值,将较小的头节点接到 `cur` 后面,移动 `cur` 指针和较小头节点所在链表的指针,直到其中一个链表为空,将另一个链表接到 `cur` 后面即可。