Leetcode 21: 合并两个有序链表(Merge Two Sorted Lists)

题目描述:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

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

算法思路:
顺次比较两个链表的元素,将二者中较小的元素依次插入到新链表中,若其中一个链表的结点首先全部插入到新链表中,则将另一个链表的剩余元素插入到新链表的表尾。

代码实现(Java):

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if(l1 == null && l2 == null){
            return null;
        }
        if(l1 == null){
            return l2;
        }
        if(l2 == null){
            return l1;
        }
        ListNode head = new ListNode(0);//引用数据类型
        ListNode curr = head;           //引用数据类型
        while(l1 != null && l2 != null){
            if(l1.val <= l2.val){
                curr.next = l1;
                l1 = l1.next;
                curr = curr.next;
            }else{
                curr.next = l2;
                l2 = l2.next;
                curr = curr.next;
            }
        }
        if(l1 != null){
            curr.next = l1;
        }
        if(l2 != null){
            curr.next = l2;
        }
        return head.next;
    }
}

复杂度分析:
时间复杂度:O(n),n为较大链表的结点数
空间复杂度:O(1)
执行用时:9ms

要点总结:
1.引用类型:在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
对象、数组都是引用数据类型。
所有引用类型的默认值都是null。
一个引用变量可以用来引用任何与之兼容的类型。
例子:ListNode head = new ListNode(0)。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存, 对象本身占用一块内存( 堆内存),变量也占用一块内存,例如 Objet obj = new Object();变量 obj 是一个内存,new Object()是另一个内存,此时,变量 obj 所对应的内存中存储的数值就是对象占用的那
块内存的首地址。

2.Java中的String类也属于引用数据类型,对于String类型来说,
String a = new String(“foo”);
String b = new String(“foo”);
两条 new 语句创建了两个对象,然后用 a/b 这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即 a 和 b 中存储的数值是不相同的,所以,表达式 a == b 将返回 false,而这两个对象中的内容是相同的,所以,表达式 a.equals(b)将返回true。

String str = “scce”; //这是在静态数据区创建了一个对象
String str2 = “scce”; //创建静态数据对象是先在静态数据区查,如果存在则不创建新的,保证静态数据区中的数据只有一份,
str == str2返回true //指向同一个对象
String str2 = new String(“scce”); str==str2返回false //在堆中创建一个对象,引用值不同
Stirng特殊在如果静态数据区中存在,那么不创建新的对象,而是指向这个对象。

3.与之引用数据类型相对应的是内置数据类型,包括:byte;short;float;double;long;int;char;boolean。

4.java.lang.NullPointerException异常分析,该异常是由于在程序运行总出现相当于c和c++中的空指针的问题,仔细排查即可解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值