返回

剑指算法:合并有序链表

前端

今天继续来一道链表的题目,来自 LeetCode 的合并两个有序链表。讲道理感觉链表这种数据结构挺呆的,不像数组一样,想取那个直接用下标。但链表也有链表的优势,比如插入和删除元素时不需要移动其他元素,这就使得链表在某些情况下比数组更有效率。

什么是链表?

链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的链接。链表可以存储各种类型的数据,比如数字、字符串、对象等。链表的优点是插入和删除元素非常方便,只需要修改相关节点的指针即可,而不需要移动其他元素。但是,链表也有一个缺点,就是查找元素时需要遍历整个链表,这使得链表在查找元素时比数组效率较低。

合并两个有序链表

现在,我们来讨论如何合并两个有序链表。有序链表是指链表中的元素按照从小到大排列。合并两个有序链表时,我们需要将两个链表中的元素逐个比较,并将较小的元素放入新链表中。这个过程需要重复,直到两个链表中的元素都被处理完。

以下是一段 Python 代码,演示如何合并两个有序链表:

def merge_two_sorted_lists(list1, list2):
    # 创建一个新的链表来存储合并后的结果
    new_list = ListNode()
    
    # 设置当前节点为新链表的头部
    current_node = new_list
    
    # 遍历两个链表,并比较每个节点的值
    while list1 and list2:
        if list1.val <= list2.val:
            # 将较小的节点添加到新链表中
            current_node.next = list1
            
            # 将当前节点移动到下一个节点
            current_node = current_node.next
            
            # 将当前链表移动到下一个节点
            list1 = list1.next
        else:
            # 将较小的节点添加到新链表中
            current_node.next = list2
            
            # 将当前节点移动到下一个节点
            current_node = current_node.next
            
            # 将当前链表移动到下一个节点
            list2 = list2.next
    
    # 将剩余的节点添加到新链表中
    while list1:
        current_node.next = list1
        current_node = current_node.next
        list1 = list1.next
    
    while list2:
        current_node.next = list2
        current_node = current_node.next
        list2 = list2.next
    
    # 返回新链表
    return new_list.next

结语

以上就是如何合并两个有序链表的方法。希望这篇文章对您有所帮助。如果您有任何问题,请随时留言。