、设LA和LB是两个有序的单链表,Pa和Pb分别指向两个表的表头结点,试编写一个算法将这两个表归并为一个有序的单链表
时间: 2024-10-17 22:14:20 浏览: 33
小白算法积累——单链表15#2个带头结点单链表+提取公共元素+二表合一
为了合并两个有序的单链表LA和LB,可以创建一个新的链表,并逐步添加节点,始终保持新链表的元素顺序正确。这里提供一种简单的Python思路:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def merge_sorted_lists(la_head, lb_head):
# 创建新的头节点和指针
dummy = ListNode(0) # 空链表的虚拟头节点
tail = dummy
# 定义循环条件
while la_head and lb_head:
if la_head.val < lb_head.val: # 如果LA的当前值小,添加LA的节点
tail.next = la_head
la_head = la_head.next
else: # 否则,添加LB的节点
tail.next = lb_head
lb_head = lb_head.next
tail = tail.next # 更新tail以便于下一次比较
# 如果其中一个链表还有剩余节点,将其添加到新链表的末尾
if la_head:
tail.next = la_head
elif lb_head:
tail.next = lb_head
# 返回合并后的链表的实际头节点
return dummy.next
# 使用示例
la = ListNode(1, ListNode(3))
lb = ListNode(2, ListNode(4, ListNode(5)))
merged_list_head = merge_sorted_lists(la, lb)
```
这个算法遍历了两个输入链表,每次比较当前节点的值并选择较小的那个添加到新链表中,直到其中一个链表结束。剩下的部分直接连接到新链表的末尾。
阅读全文