160. Intersection of Two Linked Lists java实现

博客主要围绕两个链接列表的交集展开,介绍了两种解法,还提及用到的函数解释。目标是每天做一道算法题,当天已完成1道,日期为2019年5月28日。

两个链接列表的交集

编写程序以找到两个单链表开头的节点。
例如,以下两个链表:

在这里插入图片描述

开始在节点c1处相交。

解法一:

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        if(headA == null || headB == null){
            return null;
        }
        int a = 0;
        int b = 0;
        int res = 0;
        ListNode acur = headA;
        ListNode bcur = headB;
        while(acur != null){
            a++;
            acur = acur.next;
        }
        while(bcur != null){
            b++;
            bcur = bcur.next;
        }
        res = Math.abs(a-b);
        if(res == 0){
            //a == b == 1
            if(headB == headA){
                return headB;
            }
        }
        if(a>b){
            while(res != 0){
                headA = headA.next;
                res--;
            }
        }else{
            while(res != 0){
                headB = headB.next;
                res--;
            }
        }
        while(headA != headB){
            headA = headA.next;
            headB = headB.next;
        }
        return headA;
    }
}

解法二:

HashMap<ListNode,Integer> map = new HashMap<ListNode,Integer>();
        ListNode current1 = headA;
        ListNode current2 = headB;
        while(current1!=null){
                map.put(current1,current1.val);
                current1 = current1.next;
        }
        
        while(current2!=null){
            if(map.containsKey(current2)){
                return current2;
               
            }else{
                map.put(current1,current2.val);
            }
            current2 = current2.next;
        }
        
        return null;
用到的函数解释:
containsKey
boolean containsKey(Object key)如果此映射包含指定键的映射关系,则返回 true。更确切地讲,当且仅当此映射包含针对满足 (key==null ? k==null : key.equals(k)) 的键 k 的映射关系时,返回 true。(最多只能有一个这样的映射关系)。 
参数:
key - 测试是否存在于此映射中的键 
返回:
如果此映射包含指定键的映射关系,则返回 true 
抛出: 
ClassCastException - 如果该键对于此映射是不合适的类型(可选) 
NullPointerException - 如果指定键为 null 并且此映射不允许 null 键(可选)


containsValue
boolean containsValue(Object value)如果此映射将一个或多个键映射到指定值,则返回 true。更确切地讲,当且仅当此映射至少包含一个对满足 (value==null ? v==null : value.equals(v)) 的值 v 的映射关系时,返回 true。对于大多数 Map 接口的实现而言,此操作需要的时间可能与映射大小呈线性关系。 
参数:
value - 测试是否存在于此映射中的值 
返回:
如果此映射将一个或多个键映射到指定值,则返回 true 
抛出: 
ClassCastException - 如果该值对于此映射是不合适的类型(可选) 
NullPointerException - 如果指定值为 null 并且此映射不允许 null 值(可选)

目标:每天一道算法题,今天是开始。
时间:2019-5-28
已完成:1道

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值