160. Intersection of Two Linked Lists
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
begin to intersect at node c1.
1、先求长度,然后遍历直到相同
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
//if(headA==null||headB==null)
// return null;
ListNode nodeA=headA,nodeB=headB;
int lenA=0,lenB=0;
while(nodeA!=null){
nodeA=nodeA.next;
lenA++;
}
while(nodeB!=null){
nodeB=nodeB.next;
lenB++;
}
nodeA=headA;
nodeB=headB;
while(lenA>lenB){
nodeA=nodeA.next;
lenA--;
}
while(lenA<lenB){
nodeB=nodeB.next;
lenB--;
}
while(nodeA!=nodeB){
nodeA=nodeA.next;
nodeB=nodeB.next;
}
return nodeA;
}
}
2、无需求长度,两个指针变换直接遍历
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA==null||headB==null)
return null;
ListNode nodeA=headA,nodeB=headB;
while(nodeA!=nodeB){
nodeA=nodeA==null?headB:nodeA.next;
nodeB=nodeB==null?headA:nodeB.next;
}
return nodeA;
}
}