返回
剑指算法:合并有序链表
前端
2023-09-16 12:03:24
今天继续来一道链表的题目,来自 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
结语
以上就是如何合并两个有序链表的方法。希望这篇文章对您有所帮助。如果您有任何问题,请随时留言。