【算法】合并两个有序链表

1. 迭代,

  1. 新建一个哨兵节点,通过它的next指针指向串联起两个链表
  2. 比较 l1 和 l2哪一个比较小,让哨兵节点的next指向比较小的节点
  3. 哨兵节点 l1 l2依次后推,直到又一个链表为空
  4. 如果 l1 为空,则哨兵节点指向l2
  5. 注意返回值为哨兵节点的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. 递归的方式————————推荐!!!

  1. 找到 l1 和 l2 的较小的节点
  2. 从后往前依次追加节点
  3. 注意next的运用
  4.         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

 

不额外花费空间存储

 

posted @ 2020-12-07 13:42  刘玉璇  阅读(186)  评论(0编辑  收藏  举报