博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lintcode:合并两个排序链表
阅读量:6224 次
发布时间:2019-06-21

本文共 4047 字,大约阅读时间需要 13 分钟。

题目:

将两个排序链表合并为一个新的排序链表

 样例

给出 1->3->8->11->15->null,2->null,

返回 1->2->3->8->11->15->null。

解题:

数据结构中的书上说过,可解,异步的方式移动两个链表的指针,时间复杂度O(n+m)

Java程序:

/** * Definition for ListNode. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int val) { *         this.val = val; *         this.next = null; *     } * } */ public class Solution {    /**     * @param ListNode l1 is the head of the linked list     * @param ListNode l2 is the head of the linked list     * @return: ListNode head of linked list     */    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {        // write your code here        if(l1==null && l2!=null)            return l2;        if(l1!=null && l2==null)            return l1;        if(l1==null && l2==null)            return null;        ListNode head = new ListNode(0);        ListNode current = head;                      while(l1!=null && l2!=null){                if(l1.val<=l2.val){                    current.next = l1;                    current = current.next;                    l1 = l1.next;                }else{                    current.next = l2;                    current = current.next;                    l2 = l2.next;                }            }        if(l1!=null)            current.next= l1;        if(l2!=null)            current.next=l2;        return head.next;    }}
View Code

总耗时: 13348 ms

Python程序:

"""Definition of ListNodeclass ListNode(object):    def __init__(self, val, next=None):        self.val = val        self.next = next"""class Solution:    """    @param two ListNodes    @return a ListNode    """    def mergeTwoLists(self, l1, l2):        # write your code here        if l1==None:            return l2        if l2==None:            return l1        if l1==None and l2==None:            return None        head = ListNode(0)        p = head        while l1!=None and l2!=None:            if l1!=None and l2!=None:                if l1.val<= l2.val:                    p.next = l1                    p = p.next                    l1 = l1.next                else:                    p.next = l2                    p = p.next                    l2 = l2.next            if l1==None:                p.next = l2                break            if l2==None:                p.next = l1                break        return head.next
View Code

总耗时: 2032 ms

 参考剑指OfferP117

利用递归的思想

小的节点链接,下一次递归

递归的好处是不用单独搞个节点当作头节点了,通俗点说是许多头节点连接起来的,最终我们返回的是第一个头节点

/** * Definition for ListNode. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int val) { *         this.val = val; *         this.next = null; *     } * } */ public class Solution {    /**     * @param ListNode l1 is the head of the linked list     * @param ListNode l2 is the head of the linked list     * @return: ListNode head of linked list     */    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {        // write your code here        if(l1==null && l2!=null)            return l2;        if(l1!=null && l2==null)            return l1;        if(l1==null && l2==null)            return null;        ListNode MergeHead = null;        if(l1.val < l2.val){            MergeHead = l1;            MergeHead.next = mergeTwoLists(l1.next,l2);        }else{            MergeHead = l2;            MergeHead.next = mergeTwoLists(l1,l2.next);        }        return MergeHead;            }}
Java Code

总耗时: 14047 ms

"""Definition of ListNodeclass ListNode(object):    def __init__(self, val, next=None):        self.val = val        self.next = next"""class Solution:    """    @param two ListNodes    @return a ListNode    """    def mergeTwoLists(self, l1, l2):        # write your code here        if l1==None:            return l2        if l2==None:            return l1        if l1==None and l2==None:            return None        head = None        if l1.val< l2.val:            head = l1            head.next = self.mergeTwoLists(l1.next,l2)        else:            head = l2            head.next = self.mergeTwoLists(l1,l2.next)        return head
Python Code

总耗时: 2403 ms

 

转载地址:http://wruna.baihongyu.com/

你可能感兴趣的文章
挑战JavaScript正则表达式每日两题(1)
查看>>
WCF分布式开发常见错误(29):未识别的属性'targetFramework'
查看>>
Symfony2博客应用程序教程:第四部分-安全介绍
查看>>
python中if __name__ == "__main__"的解释
查看>>
《开源运营技术精髓》之负载均衡-1.2
查看>>
实践对网络安全建设思路的修正---“花瓶”模型V2.0
查看>>
如何为Linux安装Go语言
查看>>
Azure PowerShell (8) 使用PowerShell设置Azure负载均衡器规则
查看>>
lcd ram/半反穿技术解析【转】
查看>>
BSD vi/vim 命令大全(下)[转]
查看>>
EditText的属性介绍
查看>>
Unity3d dll 热更新 基础框架
查看>>
【Java开发技术之程序测试】Junit4 新功能学习总结
查看>>
接触C# 反射
查看>>
c#中const、static、readonly的区别
查看>>
在 Silverlight 项目中获取程序集的引用信息
查看>>
函数式编程(3) 幻灯片
查看>>
总结c#和javascript中常见的相关的"空"
查看>>
用DirectX实现粒子系统(二)
查看>>
六个人如何运维一万台服务器?
查看>>