输入两个链表,找出它们的第一个公共节点。
如下面的两个链表:
在节点 c1 开始相交。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/*
求两个链表的交点
A:先求出两个链表的长度
B:curA和curB分别遍历两个链表
C:长度长的,先走差值步,然后一步步走,相遇了,就返回交点
*/
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA==null||headB==null){
return null;
}
ListNode curA = headA;
ListNode curB = headB;
int lenA = getLinkedListLen(headA);
int lenB = getLinkedListLen(headB);
if(lenA>lenB){
for(int i=0;i<lenA-lenB;i++){
curA = curA.next;
}
}else if(lenA<lenB){
for(int i=0;i<lenB-lenA;i++){
curB = curB.next;
}
}
while(curA!=null&&curB!=null){
if(curA==curB){
return curA;
}else{
curA = curA.next;
curB = curB.next;
}
}
return null;
}
public int getLinkedListLen(ListNode head){
if(head!=null){
return 1+getLinkedListLen(head.next);
}
return 0;
}
}