返回

将两个有序的链表进行融合,打造有序的新队列!

前端

理解有序链表合并

有序链表合并是指将两个或多个已经按照升序或降序排列的链表合并成一个新的链表,合并后的链表仍然保持原有的顺序。这种操作在数据处理和算法中非常常见,尤其是在需要对数据进行排序或合并时。

合并算法详解

现在,我们来详细介绍一种合并两个有序链表的算法:

  1. 初始化: 创建一个新的空链表 head,它将存储合并后的结果。同时,分别设置两个指针 ab,分别指向两个要合并的链表 list1list2 的头结点。

  2. 比较元素: 进入循环,同时比较 a->datab->data 的值,选择较小的值插入到 head 链表中。如果 a->data 更小,则将 a->data 插入 head,并将 a 指针移动到 a->next;如果 b->data 更小,则将 b->data 插入 head,并将 b 指针移动到 b->next

  3. 更新指针:head 指针移动到新插入的节点,然后重复步骤 2,直到 ab 为空。

  4. 剩余元素: 如果 ab 中仍有剩余元素,将这些元素依次插入到 head 链表中。

代码实现

以下是使用 Python 实现的合并两个有序链表的代码示例:

def merge_sorted_lists(list1, list2):
    """
    合并两个有序的链表

    参数:
        list1:第一个链表
        list2:第二个链表

    返回:
        合并后的有序链表
    """

    # 创建一个新的空链表
    head = ListNode()

    # 设置两个指针,分别指向两个链表的头结点
    a = list1.head
    b = list2.head

    # 比较元素并插入到新的链表中
    while a and b:
        if a.data < b.data:
            head.next = a
            a = a.next
        else:
            head.next = b
            b = b.next

    # 将剩余元素插入到新的链表中
    if a:
        head.next = a
    elif b:
        head.next = b

    # 返回合并后的链表
    return head

# 示例:将两个链表 [1, 3, 5] 和 [2, 4, 6] 合并
list1 = LinkedList([1, 3, 5])
list2 = LinkedList([2, 4, 6])

# 合并两个链表
merged_list = merge_sorted_lists(list1, list2)

# 打印合并后的链表
print(merged_list)

总结

有序链表合并是一种基本的数据结构操作,在算法和数据处理中非常有用。通过使用循环和指针,我们可以有效地将两个有序的链表合并成一个新的有序链表。