首页 > 代码库 > [LeetCode]160 Intersection of Two Linked Lists

[LeetCode]160 Intersection of Two Linked Lists

https://oj.leetcode.com/problemset/algorithms/

http://www.cnblogs.com/yuzhangcmu/p/4128794.html


/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    
    // Assume headA and headB not null.
    
    public ListNode getIntersectionNode(ListNode headA, ListNode headB)
    {
        // Solution A:
        return getIntersectionNode_TwoPointer(headA, headB);
        
        // Solution B:
        // return getIntersectionNode_BuildPath(headA, headB);
    }
    
    ///////////////////////////
    // Solution A: TwoPointer
    // 
    public ListNode getIntersectionNode_TwoPointer(ListNode headA, ListNode headB)
    {
        ListNode a = headA;
        ListNode b = headB;
        while (a != b)
        {
            if (a == null)
                a = headB;
            else
                a = a.next;
            
            if (b == null)
                b = headA;
            else
                b = b.next;
        }
        return a;
    }

    ///////////////////////////
    // Solution B: BuildPath
    // 
    private ListNode getIntersectionNode_BuildPath(ListNode headA, ListNode headB) 
    {
        List<ListNode> pathA = buildPath(headA);
        List<ListNode> pathB = buildPath(headB);
        
        // Check
        int iA = pathA.size() - 1;
        int iB = pathB.size() - 1;
        
        ListNode toReturn = null;
        while (iA >= 0 && iB >= 0)
        {
            if (pathA.get(iA) == pathB.get(iB))
            {
                toReturn = pathA.get(iA);
                iA --;
                iB --;
            }
            else
            {
                break;
            }
        }
        return toReturn;
    }
    
    private List<ListNode> buildPath(ListNode head)
    {
        List<ListNode> toReturn = new ArrayList<>();
        while (head != null)
        {
            toReturn.add(head);
            head = head.next;
        }
        return toReturn;
    }
}


[LeetCode]160 Intersection of Two Linked Lists