Intersection of Two Linked Lists

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

For example, the following two linked lists:指針

A: a1 → a2code

↘
                 c1 → c2 → c3
               ↗             B:     b1 → b2 → b3 begin to intersect at node c1.

Notes:get

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.it

思路 (雙指針)

遍歷兩個LinkedList, 找到各自的長度, 而後讓長的向前走n個節點使得長短相等, 而後共同向前, 相交的位置就是intersectionio

複雜度

時間O(m+n) 空間O(a)function

代碼

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        int lena = getLength(headA);
        int lenb = getLength(headB);
        ListNode nodeA = headA;
        ListNode nodeB = headB;
        if (lena > lenb) {
            for (int i =0; i <lena-lenb; i++) {
                nodeA = nodeA.next;
            }
        } else {
            for (int i =0; i <lenb-lena; i++) {
                nodeB = nodeB.next;
            }
        }
        while (nodeA != null && nodeB!= null) {
            if (nodeA == nodeB) {
                return nodeA;
            }
            nodeA = nodeA.next;
            nodeB = nodeB.next;
        }
        return null;
        
    }

    private int getLength(ListNode head) {
        int res = 0;
        while (head != null) {
            head = head.next;
            res++;
        }
        return res;
    }
}
相關文章
相關標籤/搜索