当前位置:实例文章 » 其他实例» [文章](链表) 剑指 Offer 25. 合并两个排序的链表 ——【Leetcode每日一题】

(链表) 剑指 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


### 总结本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。

### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。

### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。

### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。

### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。

### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。

### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。

### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。

### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。

### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。

### 最后本题要求合并两个按升序排列的链表,并且返回一个新的有序链表。我们可以使用迭代法或递归法来解决这个问题。迭代法通过创建一个新链表,逐一比较两个链表中的节点值,并将较小值的节点接到新链表上来实现。递归法则是通过递归地合并两个链表的下一个节点来实现的。

### 最后本题要求

其他信息

其他资源

Top