剑指 Offer 25. 合并两个排序的链表
2022年4月16日
一、问题描述
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
二、问题分析
- 我们可以用迭代的方法来实现上述算法。当 l1 和 l2 都不是空链表时,判断 l1 和 l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果prev里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。
三、解题代码
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if l1 is None: return l2
if l2 is None: return l1
if l1.val < l2.val:
prev = l1
l1 = l1.next
else:
prev = l2
l2 = l2.next
prev_return = prev
while l1 and l2:
if l1.val < l2.val:
prev.next = l1
l1 = l1.next
else:
prev.next = l2
l2 = l2.next
prev = prev.next
if l1:
prev.next = l1
else:
prev.next = l2
return prev_return
总结
使用prev指针来指示合并后的链表情况。