码迷,mamicode.com
首页 > 其他好文 > 详细

Intersection of Two Linked Lists

时间:2017-10-24 13:06:37      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:cond   code   lis   use   math   abs   should   reset   str   

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.  

先遍历一边A,B

然后在去掉相差的节点,然后判断,详细见代码

    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
            int a=0,b=0;
            ListNode A = headA;
            ListNode B = headB;
            while(A!=null) {
              A=A.next;a++;
            }
            while(B!=null) {
                B=B.next;b++;
            }
            if(b>a) { A =headB;headB=headA;headA = A;};
            for(int i=0;i<Math.abs(b-a);i++)
                   headA = headA.next;
            while(headA!=null&&headB!=null) {
               if(headA==headB) return headA;
               headA = headA.next;
               headB = headB.next;
            }
            return null;
    }

 

 

discuss有另一种思路

就是不断地从头到尾遍历headA和headB,直到他们节点一致

如果他们AB长度相等,那就是O(n)算法

如果AB长度不等,那就是O(N^2)算法

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
    //boundary check
    if(headA == null || headB == null) return null;
    
    ListNode a = headA;
    ListNode b = headB;
    
    //if a & b have different len, then we will stop the loop after second iteration
    while( a != b){
        //for the end of first iteration, we just reset the pointer to the head of another linkedlist
        a = a == null? headB : a.next;
        b = b == null? headA : b.next;    
    }
    
    return a;
}

 

Intersection of Two Linked Lists

标签:cond   code   lis   use   math   abs   should   reset   str   

原文地址:http://www.cnblogs.com/swuwyb/p/7722814.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!