0

如何找到链表的交点?

     A1-->A2-->A3-->A4-->A5-->A6-->A7
                         ^
                         |
               B1-->B2-->B3
  1. A和B是两个链表
  2. A1, A2...A7 和 B1.. B3 是列表的节点
  3. 列表 A 和 B 在 A5 处相交。

我们必须找到交点

4

2 回答 2

2

解决方案1:

对于列表中的每个节点,检查下一个是否与另一个列表中的相同。

   if(A->next == B->next)
   {
      //nodes of interaction
   }

复杂度为 m*n

解决方案2(高效):

  • 查找两个列表的长度(分别为 L1 和 L2)。
  • 求长度 [abs(L1-L2)] 的绝对差。
  • 前往从先前差异获得的节点。
  • 现在开始检查 A->next 是否与 B->next 相同
于 2013-11-08T06:44:05.230 回答
1
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        int length1=0;
        int length2=0;

        ListNode head1 = headA;
        ListNode head2 = headB;
        while(headA!=null){
            length1++;
            headA = headA.next;
        }
        while(headB!=null){
            length2++;
            headB = headB.next;
        }
        int minus = length1-length2;
        int abs = Math.abs(minus);
        if(minus<0){
            int step=abs;
            while(step>0){
                head2 = head2.next;
                step--;
            }
        }else{
            int step=abs;
            while(step>0){
                head1 = head1.next;
                step--;
            }
        }
        if(head1==head2) 
          return head1;
        while(head1!=null&&head2!=null&&head1!=head2)
        {

              head1=head1.next;
              head2=head2.next;

        }
      return head1;  
    }
}
于 2015-02-17T07:16:51.613 回答