【算法】合并两个有序链表
1. 迭代,
- 新建一个哨兵节点,通过它的next指针指向串联起两个链表
- 比较 l1 和 l2哪一个比较小,让哨兵节点的next指向比较小的节点
- 哨兵节点 l1 l2依次后推,直到又一个链表为空
- 如果 l1 为空,则哨兵节点指向l2
- 注意返回值为哨兵节点的next,因为哨兵节点的第一个值是随意给的
class ListNode(object): def __init__(self, val=0, next=None): self.val = val self.next = next class Solution(object): def mergeTwoLists(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ prev = ListNode(-1) p = prev while l1 and l2: if l1.val <= l2: p.next = l1 l1 = l1.next else: p.next = l2 l2 = l2.next p = p.next if l1 is not None: p.next = l1 else: p.next = l2 return prev.next
2. 递归的方式————————推荐!!!
- 找到 l1 和 l2 的较小的节点
- 从后往前依次追加节点
- 注意next的运用
-
if l1 is None: return l2 elif l2 is None: return l1 elif l1.val < l2.val: l1.next = self.mergeTwoLists(l1.next, l2) return l1 else: l2.next = self.mergeTwoLists(l1, l2.next) return l2
不额外花费空间存储