zoukankan      html  css  js  c++  java
  • [剑指offer]25.合并两个排序的链表(迭代+递归)

    25.合并两个排序的链表

    题目

    输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

    示例1:

    输入:1->2->4, 1->3->4
    输出:1->1->2->3->4->4

    方法一 迭代

    时间复杂度O(n1+n2),空间复杂度O(1)

    思路: 令cur = dum,不断比较l1与l2当前节点的值,并将更小值赋给cur,最后返回没有遍历完的链表

    oj代码

    class Solution():
        def mergeTwoLists(self, l1, l2):
            cur = dum = ListNode(0)
            while l1 and l2:
                if l1.val < l2.val:
                    cur.next, l1 = l1, l1.next
                else:
                    cur.next, l2 = l2, l2.next
                cur = cur.next
            cur.next = l1 if l1 else l2
            return dum.next
    
    
    if __name__ == "__main__":
        node1 = ListNode(1)
        node2 = ListNode(2)
        node3 = ListNode(3)
        node4 = ListNode(4)
        node5 = ListNode(5)
        node1.next = node2
        node2.next = node3
        node3.next = node4
        node4.next = node5
    
        n1 = ListNode(6)
        n2 = ListNode(7)
        n3 = ListNode(8)
        n1.next = n2
        n2.next = n3
    
        res = Solution().mergeTwoLists(node1, n1)
        cur = res
        while cur:
            print(cur.val)
            cur = cur.next
    

    方法二 递归

    时间复杂度O(n1+n2),空间复杂度O(1)

    思路:比较l1与l2节点值,将更小值的指针指向下一个更小值。并返回当前节点值。

    class Solution:
        def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
            if not l1:
                return l2
            if not l2:
                return l1
            if l1.val < l2.val:
                l1.next = self.mergeTwoLists(l1.next, l2)
                return l1
            else:
                l2.next = self.mergeTwoLists(l1, l2.next)
                return l2
    
  • 相关阅读:
    谈谈关于个人提升的一些思考
    asp.net 委托用法
    DNN 配置 数据库篇
    一个技术为主的博客沦落为娱乐休息的场所
    NDO 组件和例子下载,内置了一个基于Velocity模版引擎的代码生成器
    DNN 研究路线图
    学习DNN开发模块插件的几条主线
    NDO 快速入门
    NDO 简介
    也谈代码生成器
  • 原文地址:https://www.cnblogs.com/wyz-2020/p/12520698.html
Copyright © 2011-2022 走看看