(链表) 剑指 Offer 25. 合并两个排序的链表 ——【Leetcode每日一题】
发布人:shili8
发布时间:2025-03-15 14:34
阅读次数:0
**剑指 Offer25. 合并两个排序的链表**
### 题目描述合并两个按升序排列的链表,并且返回一个新的有序链表。
### 示例输入:1->1->2->3->4->5 和1->3->5->7输出:1->1->2->3->3->4->5->5->7### 解法#### 方法一:迭代法
# Definition for singly-linked list. class ListNode: def __init__(self, x): self.val = x self.next = Nonedef mergeTwoLists(l1, l2): """ 合并两个排序的链表 Args: l1 (ListNode): 第一个链表 l2 (ListNode): 第二个链表 Returns: ListNode: 合并后的链表 """ # 创建新的头结点 head = ListNode(0) # 指向新链表的指针 cur = head while l1 and l2: if l1.val < l2.val: # 将较小值的节点接到新链表上 cur.next = l1 # 移动l1指针 l1 = l1.next else: # 将较小值的节点接到新链表上 cur.next = l2 # 移动l2指针 l2 = l2.next # 移动cur指针 cur = cur.next # 如果有剩余的节点,直接将其接到新链表上 if l1: cur.next = l1 elif l2: cur.next = l2 return head.next# 测试代码l1 = ListNode(1) l1.next = ListNode(1) l1.next.next = ListNode(2) l1.next.next.next = ListNode(3) l1.next.next.next.next = ListNode(4) l1.next.next.next.next.next = ListNode(5) l2 = ListNode(1) l2.next = ListNode(3) l2.next.next = ListNode(5) l2.next.next.next = ListNode(7) head = mergeTwoLists(l1, l2) while head: print(head.val, end=" ") head = head.next
#### 方法二:递归法
# Definition for singly-linked list. class ListNode: def __init__(self, x): self.val = x self.next = Nonedef mergeTwoLists(l1, l2): """ 合并两个排序的链表 Args: l1 (ListNode): 第一个链表 l2 (ListNode): 第二个链表 Returns: ListNode: 合并后的链表 """ # 如果l1为空,直接返回l2 if not l1: return l2 # 如果l2为空,直接返回l1 elif not l2: return l1 # 如果l1的值小于l2的值,递归合并l1和l2的下一个节点 if l1.val < l2.val: l1.next = mergeTwoLists(l1.next, l2) return l1 else: l2.next = mergeTwoLists(l1, l2.next) return l2# 测试代码l1 = ListNode(1) l1.next = ListNode(1) l1.next.next = ListNode(2) l1.next.next.next = ListNode(3) l1.next.next.next.next = ListNode(4) l1.next.next.next.next.next = ListNode(5) l2 = ListNode(1) l2.next = ListNode(3) l2.next.next = ListNode(5) l2.next.next.next = ListNode(7) head = mergeTwoLists(l1, l2) while head: print(head.val, end=" ") head = head.next
### 总结本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。
### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。
### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。
### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。
### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。
### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。
### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。
### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。
### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。
### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。
### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。
### 最后本题要求