两个有序链表序列的合并python
时间: 2024-12-17 07:23:46 浏览: 12
在Python中,你可以使用迭代或递归的方式来合并两个已排序的链表。这里是一个使用迭代的例子:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def merge_sorted_lists(l1, l2):
# 创建一个新的头节点
dummy = ListNode(0)
tail = dummy
while l1 and l2:
if l1.val < l2.val:
tail.next = l1
l1 = l1.next
else:
tail.next = l2
l2 = l2.next
tail = tail.next
# 如果其中一个链表还有剩余元素,将其添加到结果链表末尾
if l1:
tail.next = l1
elif l2:
tail.next = l2
return dummy.next
```
这个函数通过不断比较两个链表当前节点的值,并将较小的那个添加到结果链表中,直到有一个链表遍历完为止。最后返回新的头节点`dummy.next`,它指向合并后的有序链表。
相关问题
7-1 两个有序链表序列的合并 python
在Python中,合并两个有序链表序列是一个常见的编程任务。这通常可以通过定义一个新链表,并逐一比较两个链表的节点值来实现。以下是一个简单的示例代码,展示如何合并两个有序链表:
```python
class ListNode:
def __init__(self, value=0, next=None):
self.value = value
self.next = next
def merge_two_lists(l1, l2):
# 创建一个虚拟头节点,以便于处理边界情况
dummy = ListNode()
current = dummy
# 当两个链表都不为空时,进行比较并链接节点
while l1 and l2:
if l1.value < l2.value:
current.next = l1
l1 = l1.next
else:
current.next = l2
l2 = l2.next
current = current.next
# 当一个链表为空时,直接将另一个链表剩余部分链接到结果链表
current.next = l1 or l2
return dummy.next
# 使用示例
# 假设有两个链表 l1 = [1 -> 2 -> 4] 和 l2 = [1 -> 3 -> 4]
# 合并后的链表应该是 [1 -> 1 -> 2 -> 3 -> 4 -> 4]
```
在这个例子中,`ListNode` 是链表节点的类定义,`merge_two_lists` 函数负责合并两个链表。该函数首先创建了一个虚拟头节点 `dummy`,用于简化边界情况的处理。然后使用一个循环来比较 `l1` 和 `l2` 链表的当前节点值,根据大小顺序链接到结果链表中。如果一个链表被遍历完毕,另一个链表的剩余部分将被直接链接到结果链表的末尾。
7-3 两个有序链表序列的合并 用python
可以使用归并排序的思想来合并两个有序链表。
以下是 Python 代码示例:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def mergeTwoLists(self, 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
# 将剩余的结点连接上
curr.next = l1 or l2
# 返回合并后的链表
return dummy.next
```
你也可以使用递归的方法来实现。
```python
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
if not l1:
return l2
if not l2:
return l1
if l1.val <= l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
```
希望能够帮到你!
阅读全文