题目:给你两个单链表的头节点headA 和 headB 请你找出并返回两个单链表相交的起始结点,如果两个链表不相交返回null
题解:由提示可以想到分别计算出二者链表的长度,选出两个链表最短的长度,两个链表以最短的链表为开始往后遍历(比如:上图A链表长度为5 B链表长度为6 那就选5为二者链表的长度 让B链表从b2开始往后遍历A链表从a1开始往后遍历 之后二者会在c1相遇 返回c1节点)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode curA = headA;
ListNode curB=headB;
int lenA = 0;
int lenB =0;
while(curA!=null){
curA=curA.next;
lenA++;
}
while(curB!=null){
curB=curB.next;
lenB++;
}
curA=headA;
curB=headB;
if(lenB>lenA){
int temp =lenA;
lenA=lenB;
lenB=temp;
ListNode tempNode = curA;
curA=curB;
curB=tempNode;
}
int gap = lenA-lenB;
while(gap-->0){
curA=curA.next;
}
while(curA!=null){
if(curA==curB){
return curA;
}
curA=curA.next;
curB=curB.next;
}
return null;
}
}