• 160. Intersection of Two Linked Lists


    Write a program to find the node at which the intersection of two singly linked lists begins.

    For example, the following two linked lists:

    A:          a1 → a2
                       ↘
                         c1 → c2 → c3
                       ↗            
    B:     b1 → b2 → b3
    

    begin to intersect at node c1.

    Notes:

    • If the two linked lists have no intersection at all, return null.
    • The linked lists must retain their original structure after the function returns.
    • You may assume there are no cycles anywhere in the entire linked structure.
    • Your code should preferably run in O(n) time and use only O(1) memory.
    //Time: O(n), Space: O(1)    
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
            if (headA == null || headB == null) {
                return null;
            }
            
            int lenA = getLen(headA);
            int lenB = getLen(headB);
            
            if (lenA > lenB) {
                headA = forward(headA, lenA - lenB);
            } else {
                headB = forward(headB, lenB - lenA);
            }
            
            
            while (headA != null && headB != null) {
                if (headA == headB) {
                    return headA;
                }
                
                headA = headA.next;
                headB = headB.next;
            }
            
            return null;
        }
        
        private int getLen(ListNode head) {
            int count = 1;
            
            while (head != null) {
                head = head.next;
                count++;
            }
            
            return count;
        }
        
        private ListNode forward(ListNode head, int step) {
            while (step > 0) {
                head = head.next;
                step--;
            }
            
            return head;
        }
  • 相关阅读:
    dubbo服务provider方打印警告日志,getDeserializer
    [学习]sentinel中的DatatSource(一) ReadableDataSource
    ppt字体
    dubbo异常filter
    术语
    [转]五步git操作搞定Github中fork的项目与原作者同步
    markdown学习资料
    springboot properties
    aop备忘
    git技巧
  • 原文地址:https://www.cnblogs.com/jessie2009/p/9817727.html
Copyright © 2020-2023  润新知