返回

题解:将两个有序链表合并为一个有序链表

Android

前言

在计算机科学中,链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。当我们需要存储和处理有序数据时,有序链表是一种常用的选择。有序链表中的节点按照某种顺序排列,通常是升序或降序。

合并两个有序链表

合并两个有序链表是指将两个已有的有序链表合并为一个新的有序链表。合并后的链表应该包含所有来自两个原始链表中的元素,并且仍然保持有序。

算法过程

要合并两个有序链表,我们可以使用以下步骤:

  1. 设置两个指针,分别指向两个原始链表的头部。
  2. 比较两个指针指向的节点的数据,将较小的节点添加到新的链表中。
  3. 将较小的节点的指针指向下一个节点。
  4. 重复步骤 2 和 3,直到两个指针都指向空。
  5. 将两个指针指向的节点添加到新的链表中。

代码示例

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

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

  参数:
    list1: 第一个有序链表。
    list2: 第二个有序链表。

  返回:
    一个新的有序链表,包含所有来自两个原始链表中的元素。
  """

  # 设置两个指针,分别指向两个原始链表的头部。
  p1 = list1.head
  p2 = list2.head

  # 创建一个新的链表来存储合并后的结果。
  new_list = LinkedList()

  # 比较两个指针指向的节点的数据,将较小的节点添加到新的链表中。
  while p1 and p2:
    if p1.data < p2.data:
      new_list.add_node(p1.data)
      p1 = p1.next
    else:
      new_list.add_node(p2.data)
      p2 = p2.next

  # 将两个指针指向的节点添加到新的链表中。
  while p1:
    new_list.add_node(p1.data)
    p1 = p1.next

  while p2:
    new_list.add_node(p2.data)
    p2 = p2.next

  # 返回合并后的链表。
  return new_list

复杂度分析

合并两个有序链表的时间复杂度为 O(n + m),其中 n 和 m 是两个原始链表的长度。空间复杂度为 O(1),因为我们只需要额外的空间来存储合并后的链表。

总结

合并两个有序链表是一个常见的问题,在计算机科学中有很多应用。在本文中,我们介绍了一种简单而高效的算法来合并两个有序链表。我们还提供了一个 Python 实现的代码示例,帮助您理解合并有序链表的具体方法。