# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
# 方法1 递归 很容易想到的解法
# 首先判断链表是否为空
# if list1 is None:
# return list2
# elif list2 is None:
# return list1
# 其次再对链表中的元素进行值的比较,需要注意的是需要连接递归返回的节点,即list1.next
# elif list1.val < list2.val:
# list1.next = self.mergeTwoLists(list1.next,list2)
# return list1
# else:
# list2.next = self.mergeTwoLists(list1, list2.next)
# return list2
# 方法2 迭代 非递归方法
# 定义头结点
prehead = ListNode(-1)
# 再定义一个新链表的辅助节点,先指向头结点
pre = prehead
# 这里的逻辑非常好理解,按照升序依次排列新链表的元素
while list1 and list2:
if list1.val <= list2.val:
pre.next = list1
list1 = list1.next
else:
pre.next = list2
list2 = list2.next
pre = pre.next
# 当一个链表为空时的操作
pre.next = list1 if list1 is not None else list2
return prehead.next
LeetCode 21 合并两个有序链表
最新推荐文章于 2022-09-25 23:07:32 发布
这篇博客探讨了如何使用Python实现两个已排序的链表合并,提供了递归和迭代两种方法。递归解法中,首先检查链表是否为空,然后比较节点值并递归地合并后续节点。迭代解法通过创建一个虚拟头节点和辅助指针,依次比较两个链表的节点,构造新的有序链表。最后返回新链表的头节点。
摘要由CSDN通过智能技术生成