题目
思路
- 如果两个链表相交,则交点比在较短的链表的其中一个节点上
- 遍历两个链表计算两个链表的长度,相减计算长度的差值
- 较长的链表先走差值的长度
- 同时遍历两个链表,比较两个链表的值,相等则相交
java
/**
* 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) {
int lenA = 0;
int lenB = 0;
ListNode listA = headA;
ListNode listB = headB;
while (listA != null) {
listA = listA.next;
lenA++;
}
while (listB != null) {
listB = listB.next;
lenB++;
}
int diff;
if(lenA > lenB) {
diff = lenA - lenB;
while (diff > 0) {
diff--;
headA = headA.next;
}
} else {
diff = lenB - lenA;
while (diff > 0) {
diff--;
headB = headB.next;
}
}
while (headA != null && headB != null) {
if (headA == headB) {
return headA;
}
headA = headA.next;
headB = headB.next;
}
return null;
}
}