[Lintcode]Intersection of Two Linked Lists 两个链表的交叉

来源:互联网 发布:淘宝失效宝贝什么意思 编辑:程序博客网 时间:2024/05/18 00:03

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

Example

The following two linked lists:

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

begin to intersect at node c1.

分析:求出两边长度差,然后长度长的一边先走过长度差部分。然后A,B同时开始同步前进。直到指向同一个引用时停止。


/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null;       *     } * } */public class Solution {    /**     * @param headA: the first list     * @param headB: the second list     * @return: a ListNode      */    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {        int a = 0, b = 0;        ListNode t1 = headA, t2 = headB;        while(t1 != null) {            a++;            t1 = t1.next;        }        while(t2 != null) {            b++;            t2 = t2.next;        }        t1 = headA;        t2 = headB;        if(a > b) {            while(a-- > b) t1 = t1.next;        }else if(a < b) {            while(b-- > a) t2 = t2.next;        }                while(t1!= null && t2 != null) {            if(t1 == t2) return t1;            else {                t1 = t1.next;                t2 = t2.next;            }        }        return null;    }  }



0 0
原创粉丝点击