zoukankan      html  css  js  c++  java
  • 力扣:链表相交

    问题:给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。

    在此题中,我们使用一个新的链表list存储headA,然后将B的引用和list的引用对比,如果存在,则返回引用节点,否则返回null。

    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
            if (headA == null || headB == null) {
                return null;
            }
    
            List<ListNode> list = new LinkedList<>();
            ListNode curA = headA;
            while (curA != null) {
                list.add(curA);
                curA = curA.next;
            }
            ListNode curB = headB;
            while (curB != null) {
                if (list.contains(curB)) {
                    return curB;
                }
                curB = curB.next;
            }
            return null;
        }
    

    注意:第二种思路 采用双指针法。
    一针指向headA,一针指向headB。若相遇则返回,否则返回null。

    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
            if(headA == null || headB == null)  return null;
    
            ListNode curA = headA,curB = headB;
            
            // 判断条件为,curA==null而curB!=null,反之亦然
            while(curA != curB){
                curA = curA == null ? headB : curA.next;
                curB = curB == null ? headA : curB.next;
            }
    
            return curA;
        }
    
  • 相关阅读:
    Django Form组件的扩展
    Python TCP与UDP的区别
    Python三次握手和四次挥手
    网络基础之网络协议
    Python 类方法、实例方法、静态方法的使用与及实例
    python深浅拷贝
    2021牛客寒假算法基础集训营1 题解
    01 Trie 专题
    MOTS:多目标跟踪和分割论文翻译
    牛客巅峰赛S2第6场题解
  • 原文地址:https://www.cnblogs.com/njuptzheng/p/12789622.html
Copyright © 2011-2022 走看看