标签: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:
null.先遍历一边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